diff --git a/src/app/generated/.openapi-generator/FILES b/src/app/generated/.openapi-generator/FILES index 075f519..f9a0840 100644 --- a/src/app/generated/.openapi-generator/FILES +++ b/src/app/generated/.openapi-generator/FILES @@ -3,12 +3,19 @@ README.md api.module.ts api/api.ts +api/microfrontends.service.ts api/products.service.ts configuration.ts encoder.ts git_push.sh index.ts +model/createMicrofrontendRequest.ts model/createProductRequest.ts +model/createUIEndpoint.ts +model/microfrontend.ts +model/microfrontendAbstract.ts +model/microfrontendPageResult.ts +model/microfrontendSearchCriteria.ts model/models.ts model/problemDetailInvalidParam.ts model/problemDetailParam.ts @@ -17,6 +24,9 @@ model/product.ts model/productAbstract.ts model/productPageResult.ts model/productSearchCriteria.ts +model/uIEndpoint.ts +model/updateMicrofrontendRequest.ts model/updateProductRequest.ts +model/updateUIEndpoint.ts param.ts variables.ts diff --git a/src/app/generated/api/api.ts b/src/app/generated/api/api.ts index 6a854d7..cb8fcc6 100644 --- a/src/app/generated/api/api.ts +++ b/src/app/generated/api/api.ts @@ -1,3 +1,5 @@ +export * from './microfrontends.service'; +import { MicrofrontendsAPIService } from './microfrontends.service'; export * from './products.service'; import { ProductsAPIService } from './products.service'; -export const APIS = [ProductsAPIService]; +export const APIS = [MicrofrontendsAPIService, ProductsAPIService]; diff --git a/src/app/generated/api/microfrontends.service.ts b/src/app/generated/api/microfrontends.service.ts new file mode 100644 index 0000000..d63610f --- /dev/null +++ b/src/app/generated/api/microfrontends.service.ts @@ -0,0 +1,454 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { CreateMicrofrontendRequest } from '../model/createMicrofrontendRequest'; +// @ts-ignore +import { Microfrontend } from '../model/microfrontend'; +// @ts-ignore +import { MicrofrontendPageResult } from '../model/microfrontendPageResult'; +// @ts-ignore +import { MicrofrontendSearchCriteria } from '../model/microfrontendSearchCriteria'; +// @ts-ignore +import { ProblemDetailResponse } from '../model/problemDetailResponse'; +// @ts-ignore +import { UpdateMicrofrontendRequest } from '../model/updateMicrofrontendRequest'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + +export interface CreateMicrofrontendRequestParams { + createMicrofrontendRequest: CreateMicrofrontendRequest; +} + +export interface DeleteMicrofrontendRequestParams { + id: string; +} + +export interface GetMicrofrontendRequestParams { + id: string; +} + +export interface SearchMicrofrontendsRequestParams { + microfrontendSearchCriteria: MicrofrontendSearchCriteria; +} + +export interface UpdateMicrofrontendRequestParams { + id: string; + updateMicrofrontendRequest: UpdateMicrofrontendRequest; +} + + +@Injectable({ + providedIn: 'any' +}) +export class MicrofrontendsAPIService { + + protected basePath = 'http://onecx-product-store-bff:8080'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Create microfrontend + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public createMicrofrontend(requestParameters: CreateMicrofrontendRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public createMicrofrontend(requestParameters: CreateMicrofrontendRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public createMicrofrontend(requestParameters: CreateMicrofrontendRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public createMicrofrontend(requestParameters: CreateMicrofrontendRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const createMicrofrontendRequest = requestParameters.createMicrofrontendRequest; + if (createMicrofrontendRequest === null || createMicrofrontendRequest === undefined) { + throw new Error('Required parameter createMicrofrontendRequest was null or undefined when calling createMicrofrontend.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/microfrontends`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: createMicrofrontendRequest, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + + /** + * Delete microfrontend by ID + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public deleteMicrofrontend(requestParameters: DeleteMicrofrontendRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public deleteMicrofrontend(requestParameters: DeleteMicrofrontendRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public deleteMicrofrontend(requestParameters: DeleteMicrofrontendRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public deleteMicrofrontend(requestParameters: DeleteMicrofrontendRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const id = requestParameters.id; + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling deleteMicrofrontend.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/microfrontends/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + + /** + * Return microfrontend by ID + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public getMicrofrontend(requestParameters: GetMicrofrontendRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public getMicrofrontend(requestParameters: GetMicrofrontendRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public getMicrofrontend(requestParameters: GetMicrofrontendRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public getMicrofrontend(requestParameters: GetMicrofrontendRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const id = requestParameters.id; + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling getMicrofrontend.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/microfrontends/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + + /** + * Search for microfrontend(s) by search criteria + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public searchMicrofrontends(requestParameters: SearchMicrofrontendsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public searchMicrofrontends(requestParameters: SearchMicrofrontendsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchMicrofrontends(requestParameters: SearchMicrofrontendsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchMicrofrontends(requestParameters: SearchMicrofrontendsRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const microfrontendSearchCriteria = requestParameters.microfrontendSearchCriteria; + if (microfrontendSearchCriteria === null || microfrontendSearchCriteria === undefined) { + throw new Error('Required parameter microfrontendSearchCriteria was null or undefined when calling searchMicrofrontends.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/microfrontends/search`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: microfrontendSearchCriteria, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + + /** + * Update microfrontend by ID + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public updateMicrofrontend(requestParameters: UpdateMicrofrontendRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public updateMicrofrontend(requestParameters: UpdateMicrofrontendRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public updateMicrofrontend(requestParameters: UpdateMicrofrontendRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public updateMicrofrontend(requestParameters: UpdateMicrofrontendRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const id = requestParameters.id; + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling updateMicrofrontend.'); + } + const updateMicrofrontendRequest = requestParameters.updateMicrofrontendRequest; + if (updateMicrofrontendRequest === null || updateMicrofrontendRequest === undefined) { + throw new Error('Required parameter updateMicrofrontendRequest was null or undefined when calling updateMicrofrontend.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/microfrontends/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: updateMicrofrontendRequest, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + +} diff --git a/src/app/generated/api/products.service.ts b/src/app/generated/api/products.service.ts index 5a2bed4..813a1e5 100644 --- a/src/app/generated/api/products.service.ts +++ b/src/app/generated/api/products.service.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/createMicrofrontendRequest.ts b/src/app/generated/model/createMicrofrontendRequest.ts new file mode 100644 index 0000000..403a38d --- /dev/null +++ b/src/app/generated/model/createMicrofrontendRequest.ts @@ -0,0 +1,31 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { CreateUIEndpoint } from './createUIEndpoint'; + + +export interface CreateMicrofrontendRequest { + appId: string; + appVersion: string; + appName: string; + description?: string; + remoteBaseUrl: string; + remoteEntry: string; + technology?: string; + productName: string; + classifications?: Array; + contact?: string; + iconName?: string; + note?: string; + exposedModule?: string; + endpoints?: Array; +} + diff --git a/src/app/generated/model/createProductRequest.ts b/src/app/generated/model/createProductRequest.ts index ccf8ed0..1ea0c91 100644 --- a/src/app/generated/model/createProductRequest.ts +++ b/src/app/generated/model/createProductRequest.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/createUIEndpoint.ts b/src/app/generated/model/createUIEndpoint.ts new file mode 100644 index 0000000..588e96c --- /dev/null +++ b/src/app/generated/model/createUIEndpoint.ts @@ -0,0 +1,18 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface CreateUIEndpoint { + path: string; + name: string; +} + diff --git a/src/app/generated/model/microfrontend.ts b/src/app/generated/model/microfrontend.ts new file mode 100644 index 0000000..d1f715c --- /dev/null +++ b/src/app/generated/model/microfrontend.ts @@ -0,0 +1,38 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { UIEndpoint } from './uIEndpoint'; + + +export interface Microfrontend { + id?: string; + creationDate?: string; + creationUser?: string; + modificationDate?: string; + modificationUser?: string; + modificationCount?: number; + operator?: boolean; + appId: string; + appVersion: string; + appName: string; + description?: string; + technology?: string; + remoteBaseUrl: string; + remoteEntry: string; + productName: string; + classifications?: Array; + contact?: string; + iconName?: string; + note?: string; + exposedModule?: string; + endpoints?: Array; +} + diff --git a/src/app/generated/model/microfrontendAbstract.ts b/src/app/generated/model/microfrontendAbstract.ts new file mode 100644 index 0000000..737f9e6 --- /dev/null +++ b/src/app/generated/model/microfrontendAbstract.ts @@ -0,0 +1,22 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface MicrofrontendAbstract { + id: string; + appId: string; + appName: string; + description?: string; + remoteBaseUrl: string; + productName: string; +} + diff --git a/src/app/generated/model/microfrontendPageResult.ts b/src/app/generated/model/microfrontendPageResult.ts new file mode 100644 index 0000000..609240e --- /dev/null +++ b/src/app/generated/model/microfrontendPageResult.ts @@ -0,0 +1,25 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { MicrofrontendAbstract } from './microfrontendAbstract'; + + +export interface MicrofrontendPageResult { + /** + * The total elements in the resource. + */ + totalElements?: number; + number?: number; + size?: number; + totalPages?: number; + stream?: Array; +} + diff --git a/src/app/generated/model/microfrontendSearchCriteria.ts b/src/app/generated/model/microfrontendSearchCriteria.ts new file mode 100644 index 0000000..dd4211f --- /dev/null +++ b/src/app/generated/model/microfrontendSearchCriteria.ts @@ -0,0 +1,27 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface MicrofrontendSearchCriteria { + appId?: string | null; + appName?: string | null; + productName?: string | null; + /** + * The number of page. + */ + pageNumber?: number; + /** + * The size of page + */ + pageSize?: number; +} + diff --git a/src/app/generated/model/models.ts b/src/app/generated/model/models.ts index 474732e..6c7a5d7 100644 --- a/src/app/generated/model/models.ts +++ b/src/app/generated/model/models.ts @@ -1,4 +1,10 @@ +export * from './createMicrofrontendRequest'; export * from './createProductRequest'; +export * from './createUIEndpoint'; +export * from './microfrontend'; +export * from './microfrontendAbstract'; +export * from './microfrontendPageResult'; +export * from './microfrontendSearchCriteria'; export * from './problemDetailInvalidParam'; export * from './problemDetailParam'; export * from './problemDetailResponse'; @@ -6,4 +12,7 @@ export * from './product'; export * from './productAbstract'; export * from './productPageResult'; export * from './productSearchCriteria'; +export * from './uIEndpoint'; +export * from './updateMicrofrontendRequest'; export * from './updateProductRequest'; +export * from './updateUIEndpoint'; diff --git a/src/app/generated/model/problemDetailInvalidParam.ts b/src/app/generated/model/problemDetailInvalidParam.ts index 65a08ba..004410a 100644 --- a/src/app/generated/model/problemDetailInvalidParam.ts +++ b/src/app/generated/model/problemDetailInvalidParam.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/problemDetailParam.ts b/src/app/generated/model/problemDetailParam.ts index 088c968..8bfadb5 100644 --- a/src/app/generated/model/problemDetailParam.ts +++ b/src/app/generated/model/problemDetailParam.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/problemDetailResponse.ts b/src/app/generated/model/problemDetailResponse.ts index e169397..37043d4 100644 --- a/src/app/generated/model/problemDetailResponse.ts +++ b/src/app/generated/model/problemDetailResponse.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/product.ts b/src/app/generated/model/product.ts index ce7d9b8..5177165 100644 --- a/src/app/generated/model/product.ts +++ b/src/app/generated/model/product.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/productAbstract.ts b/src/app/generated/model/productAbstract.ts index a652333..25e06ec 100644 --- a/src/app/generated/model/productAbstract.ts +++ b/src/app/generated/model/productAbstract.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/productPageResult.ts b/src/app/generated/model/productPageResult.ts index 67be7e8..53ef1fc 100644 --- a/src/app/generated/model/productPageResult.ts +++ b/src/app/generated/model/productPageResult.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/productSearchCriteria.ts b/src/app/generated/model/productSearchCriteria.ts index aa41989..5ff1e28 100644 --- a/src/app/generated/model/productSearchCriteria.ts +++ b/src/app/generated/model/productSearchCriteria.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/uIEndpoint.ts b/src/app/generated/model/uIEndpoint.ts new file mode 100644 index 0000000..7195933 --- /dev/null +++ b/src/app/generated/model/uIEndpoint.ts @@ -0,0 +1,18 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface UIEndpoint { + path: string; + name: string; +} + diff --git a/src/app/generated/model/updateMicrofrontendRequest.ts b/src/app/generated/model/updateMicrofrontendRequest.ts new file mode 100644 index 0000000..39ebce5 --- /dev/null +++ b/src/app/generated/model/updateMicrofrontendRequest.ts @@ -0,0 +1,31 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { UpdateUIEndpoint } from './updateUIEndpoint'; + + +export interface UpdateMicrofrontendRequest { + appId: string; + appVersion: string; + appName: string; + description?: string; + remoteBaseUrl: string; + remoteEntry: string; + productName: string; + technology?: string; + classifications?: Array; + contact?: string; + iconName?: string; + note?: string; + exposedModule?: string; + endpoints?: Array; +} + diff --git a/src/app/generated/model/updateProductRequest.ts b/src/app/generated/model/updateProductRequest.ts index d9fb4fe..eed3df7 100644 --- a/src/app/generated/model/updateProductRequest.ts +++ b/src/app/generated/model/updateProductRequest.ts @@ -1,6 +1,6 @@ /** * onecx-product-store-bff - * Backend-For-Frontend (BFF) service for onecx product store. + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules * * The version of the OpenAPI document: 1.0.0 * Contact: tkit_dev@1000kit.org diff --git a/src/app/generated/model/updateUIEndpoint.ts b/src/app/generated/model/updateUIEndpoint.ts new file mode 100644 index 0000000..fab27ec --- /dev/null +++ b/src/app/generated/model/updateUIEndpoint.ts @@ -0,0 +1,18 @@ +/** + * onecx-product-store-bff + * Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + * + * The version of the OpenAPI document: 1.0.0 + * Contact: tkit_dev@1000kit.org + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface UpdateUIEndpoint { + path: string; + name: string; +} + diff --git a/src/app/product-store/product-detail/product-detail.component.html b/src/app/product-store/product-detail/product-detail.component.html new file mode 100644 index 0000000..aebd9f5 --- /dev/null +++ b/src/app/product-store/product-detail/product-detail.component.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/app/product-store/product-detail/product-detail.component.scss b/src/app/product-store/product-detail/product-detail.component.scss new file mode 100644 index 0000000..d9cde2e --- /dev/null +++ b/src/app/product-store/product-detail/product-detail.component.scss @@ -0,0 +1,13 @@ +/* limit deletion dialog */ +:host ::ng-deep { + @media (max-width: 991px) { + .p-dialog.p-dialog { + max-height: unset !important; + height: unset !important; + } + } + + .danger-action-text { + color: var(--danger-button-bg); + } +} diff --git a/src/app/product-store/product-detail/product-detail.component.ts b/src/app/product-store/product-detail/product-detail.component.ts new file mode 100644 index 0000000..ec228b0 --- /dev/null +++ b/src/app/product-store/product-detail/product-detail.component.ts @@ -0,0 +1,128 @@ +import { Component, OnInit } from '@angular/core' +//import { DatePipe } from '@angular/common' +import { ActivatedRoute, Router } from '@angular/router' +import { finalize } from 'rxjs' +import { TranslateService } from '@ngx-translate/core' + +import { Action, ConfigurationService, ObjectDetailItem, PortalMessageService } from '@onecx/portal-integration-angular' +//import { limitText } from '../../shared/utils' +import { Product, ProductsAPIService, MicrofrontendsAPIService, GetProductRequestParams } from '../../generated' +import { environment } from '../../../environments/environment' + +@Component({ + templateUrl: './product-detail.component.html', + styleUrls: ['./product-detail.component.scss'], + providers: [ConfigurationService] +}) +export class ProductDetailComponent implements OnInit { + product: Product | undefined + // usedInWorkspace: Workspace[] | undefined + productName!: string + loading = true + private apiPrefix = environment.apiPrefix + public dateFormat = 'medium' + // page header + public actions: Action[] = [] + public objectDetails: ObjectDetailItem[] = [] + public headerImageUrl?: string + + constructor( + private router: Router, + private route: ActivatedRoute, + private productApi: ProductsAPIService, + private mfeApi: MicrofrontendsAPIService, + private config: ConfigurationService, + private msgService: PortalMessageService, + private translate: TranslateService + ) { + this.productName = this.route.snapshot.paramMap.get('name') || '' + this.dateFormat = this.config.lang === 'de' ? 'dd.MM.yyyy HH:mm:ss' : 'medium' + } + + ngOnInit(): void { + this.loadProduct() + } + + private loadProduct() { + this.productApi + .searchProducts({ productSearchCriteria: { name: this.productName } }) + .pipe( + finalize(() => { + this.loading = false + }) + ) + .subscribe({ + next: (data: any) => { + if (data.stream && data.stream.length > 0) { + this.product = data.stream[0] + console.info('search: ', data.stream[0]) + this.getProduct() + } + }, + error: (err: any) => { + this.msgService.error({ + summaryKey: 'DIALOG.LOAD_ERROR', + detailKey: err.error.indexOf('was not found') > 1 ? 'DIALOG.NOT_FOUND' : err.error + }) + this.close() + } + }) + } + private getProduct() { + this.productApi + .getProduct({ id: this.product?.id } as GetProductRequestParams) + .pipe( + finalize(() => { + this.loading = false + }) + ) + .subscribe({ + next: (data: any) => { + if (data) { + this.product = data + console.info('get: ', data) + } + //this.usedInWorkspace = data.workspaces + this.preparePage() + }, + error: (err: any) => { + this.msgService.error({ + summaryKey: 'DIALOG.LOAD_ERROR', + detailKey: err.error.indexOf('was not found') > 1 ? 'DIALOG.NOT_FOUND' : err.error + }) + this.close() + } + }) + } + private close(): void { + this.router.navigate(['./..'], { relativeTo: this.route }) + } + + private preparePage() { + this.setHeaderImageUrl() + this.translate.get(['ACTIONS.NAVIGATION.CLOSE', 'ACTIONS.NAVIGATION.CLOSE.TOOLTIP']).subscribe((data) => { + this.prepareActionButtons(data) + }) + } + + private prepareActionButtons(data: any): void { + this.actions = [] // provoke change event + this.actions.push({ + label: data['ACTIONS.NAVIGATION.CLOSE'], + title: data['ACTIONS.NAVIGATION.CLOSE.TOOLTIP'], + actionCallback: () => this.close(), + icon: 'pi pi-times', + show: 'always', + permission: 'PRODUCT#SEARCH' + }) + } + + private setHeaderImageUrl(): void { + // img format is from BE or from Internet + if (this.product?.imageUrl && !this.product.imageUrl.match(/^(http|https)/g)) { + this.headerImageUrl = this.apiPrefix + this.product.imageUrl + } else { + this.headerImageUrl = this.product?.imageUrl + } + } +} diff --git a/src/app/product-store/product-detail/product-intern/product-intern.component.html b/src/app/product-store/product-detail/product-intern/product-intern.component.html new file mode 100644 index 0000000..2740de6 --- /dev/null +++ b/src/app/product-store/product-detail/product-intern/product-intern.component.html @@ -0,0 +1,65 @@ +
+
+
+ + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/src/app/product-store/product-detail/product-intern/product-intern.component.ts b/src/app/product-store/product-detail/product-intern/product-intern.component.ts new file mode 100644 index 0000000..fb360f1 --- /dev/null +++ b/src/app/product-store/product-detail/product-intern/product-intern.component.ts @@ -0,0 +1,15 @@ +import { Component, Input } from '@angular/core' +import { TranslateService } from '@ngx-translate/core' + +import { Product } from '../../../generated' + +@Component({ + selector: 'ps-product-intern', + templateUrl: './product-intern.component.html' +}) +export class ProductInternComponent { + @Input() product: Product | undefined + @Input() dateFormat = 'medium' + + constructor(private translate: TranslateService) {} +} diff --git a/src/app/product-store/product-detail/product-props/product-props.component.html b/src/app/product-store/product-detail/product-props/product-props.component.html new file mode 100644 index 0000000..5b90c9b --- /dev/null +++ b/src/app/product-store/product-detail/product-props/product-props.component.html @@ -0,0 +1,37 @@ +
+
+
+ + + + + + + + + + + + + +
+
+
diff --git a/src/app/product-store/product-detail/product-props/product-props.component.ts b/src/app/product-store/product-detail/product-props/product-props.component.ts new file mode 100644 index 0000000..b60a110 --- /dev/null +++ b/src/app/product-store/product-detail/product-props/product-props.component.ts @@ -0,0 +1,15 @@ +import { Component, Input } from '@angular/core' +import { TranslateService } from '@ngx-translate/core' + +import { Product } from '../../../generated' + +@Component({ + selector: 'ps-product-props', + templateUrl: './product-props.component.html' +}) +export class ProductPropertyComponent { + @Input() product: Product | undefined + @Input() dateFormat = 'medium' + + constructor(private translate: TranslateService) {} +} diff --git a/src/app/product-store/product-search/product-search.component.html b/src/app/product-store/product-search/product-search.component.html index a4c153a..6c8e66d 100644 --- a/src/app/product-store/product-search/product-search.component.html +++ b/src/app/product-store/product-search/product-search.component.html @@ -1,7 +1,7 @@ @@ -48,11 +48,11 @@ >
- + >
@@ -66,16 +66,14 @@
-
- +
+
-
-
- {{ limitText(product.name, 15) }} +
+
+ {{ limitText(product.displayName, 15) }}
-
{{ limitText(product.description, 25) }}
+
{{ limitText(product.description, 25) }}
diff --git a/src/app/product-store/product-search/product-search.component.ts b/src/app/product-store/product-search/product-search.component.ts index 79514d1..a50316c 100644 --- a/src/app/product-store/product-search/product-search.component.ts +++ b/src/app/product-store/product-search/product-search.component.ts @@ -34,16 +34,16 @@ export class ProductSearchComponent implements OnInit { this.loadProducts() this.translate .get([ - 'SEARCH.SORT_BY', - 'SEARCH.FILTER', - 'SEARCH.FILTER_OF', 'PRODUCT.NAME', 'PRODUCT.DESCRIPTION', - 'GENERAL.TOOLTIP.VIEW_MODE_GRID', - 'GENERAL.TOOLTIP.VIEW_MODE_LIST', - 'GENERAL.TOOLTIP.VIEW_MODE_TABLE', - 'SEARCH.SORT_DIRECTION_ASC', - 'SEARCH.SORT_DIRECTION_DESC' + 'ACTIONS.DATAVIEW.VIEW_MODE_GRID', + 'ACTIONS.DATAVIEW.VIEW_MODE_LIST', + 'ACTIONS.DATAVIEW.VIEW_MODE_TABLE', + 'ACTIONS.DATAVIEW.SORT_BY', + 'ACTIONS.DATAVIEW.FILTER', + 'ACTIONS.DATAVIEW.FILTER_OF', + 'ACTIONS.DATAVIEW.SORT_DIRECTION_ASC', + 'ACTIONS.DATAVIEW.SORT_DIRECTION_DESC' ]) .subscribe((data) => { this.prepareTranslations(data) @@ -51,24 +51,27 @@ export class ProductSearchComponent implements OnInit { } public loadProducts(): void { - this.product$ = this.productApi.searchProducts({ productSearchCriteria: { pageSize: 10 } as ProductSearchCriteria }) + this.product$ = this.productApi.searchProducts({ + productSearchCriteria: { pageSize: 1000 } as ProductSearchCriteria + }) } prepareTranslations(data: any): void { this.dataViewControlsTranslations = { - sortDropdownPlaceholder: data['SEARCH.SORT_BY'], - filterInputPlaceholder: data['SEARCH.FILTER'], - filterInputTooltip: data['SEARCH.FILTER_OF'] + data['PRODUCT.NAME'] + ', ' + data['PRODUCT.DESCRIPTION'], + sortDropdownPlaceholder: data['ACTIONS.DATAVIEW.SORT_BY'], + filterInputPlaceholder: data['ACTIONS.DATAVIEW.FILTER'], + filterInputTooltip: + data['ACTIONS.DATAVIEW.FILTER_OF'] + data['PRODUCT.NAME'] + ', ' + data['PRODUCT.DESCRIPTION'], viewModeToggleTooltips: { - grid: data['GENERAL.TOOLTIP.VIEW_MODE_GRID'], - list: data['GENERAL.TOOLTIP.VIEW_MODE_LIST'] - // table: data['GENERAL.TOOLTIP.VIEW_MODE_TABLE'], + grid: data['ACTIONS.DATAVIEW.VIEW_MODE_GRID'], + list: data['ACTIONS.DATAVIEW.VIEW_MODE_LIST'] + // table: data['ACTIONS.DATAVIEW.VIEW_MODE_TABLE'], }, sortOrderTooltips: { - ascending: data['SEARCH.SORT_DIRECTION_ASC'], - descending: data['SEARCH.SORT_DIRECTION_DESC'] + ascending: data['ACTIONS.DATAVIEW.SORT_DIRECTION_ASC'], + descending: data['ACTIONS.DATAVIEW.SORT_DIRECTION_DESC'] }, - sortDropdownTooltip: data['SEARCH.SORT_BY'] + sortDropdownTooltip: data['ACTIONS.DATAVIEW.SORT_BY'] } } diff --git a/src/app/product-store/product-store.module.ts b/src/app/product-store/product-store.module.ts index 8d3765a..f84da8b 100644 --- a/src/app/product-store/product-store.module.ts +++ b/src/app/product-store/product-store.module.ts @@ -9,10 +9,12 @@ import { FieldsetModule } from 'primeng/fieldset' import { MFE_INFO, PortalCoreModule, MyMissingTranslationHandler } from '@onecx/portal-integration-angular' import { CanActivateGuard } from '../shared/can-active-guard.service' -//import { LabelResolver } from '../shared/label.resolver' +import { LabelResolver } from '../shared/label.resolver' import { HttpLoaderFactory, SharedModule } from '../shared/shared.module' import { ProductSearchComponent } from './product-search/product-search.component' -//import { ProductDetailComponent } from './product-detail/product-detail.component' +import { ProductDetailComponent } from './product-detail/product-detail.component' +import { ProductPropertyComponent } from './product-detail/product-props/product-props.component' +import { ProductInternComponent } from './product-detail/product-intern/product-intern.component' const routes: Routes = [ { @@ -20,9 +22,8 @@ const routes: Routes = [ component: ProductSearchComponent, canActivate: [CanActivateGuard], pathMatch: 'full' - } - - /* { + }, + { path: ':name', canActivate: [CanActivateGuard], component: ProductDetailComponent, @@ -34,10 +35,10 @@ const routes: Routes = [ resolve: { labeli18n: LabelResolver } - } */ + } ] @NgModule({ - declarations: [ProductSearchComponent], + declarations: [ProductSearchComponent, ProductDetailComponent, ProductPropertyComponent, ProductInternComponent], imports: [ FormsModule, FieldsetModule, diff --git a/src/assets/api/onecx-product-store-bff.yaml b/src/assets/api/onecx-product-store-bff.yaml deleted file mode 100644 index 07fb5e8..0000000 --- a/src/assets/api/onecx-product-store-bff.yaml +++ /dev/null @@ -1,346 +0,0 @@ ---- -openapi: 3.0.3 -info: - title: onecx-product-store-bff - description: Backend-For-Frontend (BFF) service for onecx product store. - version: 1.0.0 - contact: - email: 'tkit_dev@1000kit.org' - license: - name: Apache 2.0 - url: http://www.apache.org/licenses/LICENSE-2.0.html -servers: - - url: 'http://onecx-product-store-bff:8080' -tags: - - name: OneCX Product Store -paths: - /products: - post: - tags: - - Products - description: Create new product - operationId: createProduct - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateProductRequest' - responses: - '201': - description: New product created - headers: - Location: - required: true - schema: - type: string - format: url - content: - application/json: - schema: - $ref: '#/components/schemas/Product' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' - /products/search: - post: - tags: - - Products - description: Search for products by search criteria - operationId: searchProducts - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/ProductSearchCriteria' - responses: - '200': - description: Corresponding products (by search criteria) - content: - application/json: - schema: - $ref: '#/components/schemas/ProductPageResult' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' - /products/{id}: - get: - tags: - - Products - description: Return product by ID - operationId: getProduct - parameters: - - name: id - in: path - required: true - schema: - type: string - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Product' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' - put: - tags: - - Products - description: Update product by ID - operationId: updateProduct - parameters: - - name: id - in: path - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/UpdateProductRequest' - responses: - '204': - description: Product updated - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' - '404': - description: Product not found - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' - delete: - tags: - - Products - description: Delete product by ID - operationId: deleteProduct - parameters: - - name: id - in: path - required: true - schema: - type: string - responses: - '204': - description: No Content - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetailResponse' -components: - schemas: - ProductPageResult: - type: object - properties: - totalElements: - format: int64 - description: The total elements in the resource (counted items in resultset). - type: integer - number: - format: int32 - type: integer - description: Number of page which has been queried (e.g. 2 of 10) - size: - format: int32 - type: integer - description: correlated to the input (pagesize)), how many products should be shown on a single page. - totalPages: - format: int64 - type: integer - description: representing the total amount of pages based on the size provided in the request. - stream: - type: array - description: result set of the given search criteria. - items: - $ref: '#/components/schemas/ProductAbstract' - ProductSearchCriteria: - type: object - properties: - name: - type: string - nullable: true - pageNumber: - format: int32 - description: The number of page. - default: 0 - type: integer - pageSize: - format: int32 - description: The size of page - default: 10 - minimum: 1 - exclusiveMinimum: false - type: integer - CreateProductRequest: - type: object - required: - - name - - version - - basePath - properties: - name: - type: string - version: - type: string - description: - type: string - imageUrl: - type: string - basePath: - type: string - displayName: - type: string - iconName: - type: string - classifications: - type: array - uniqueItems: true - items: - type: string - UpdateProductRequest: - type: object - required: - - name - - version - - basePath - properties: - name: - type: string - version: - type: string - description: - type: string - imageUrl: - type: string - basePath: - type: string - displayName: - type: string - iconName: - type: string - classifications: - type: array - uniqueItems: true - items: - type: string - Product: - type: object - required: - - id - - name - - basePath - properties: - id: - type: string - creationDate: - $ref: '#/components/schemas/OffsetDateTime' - creationUser: - type: string - modificationDate: - $ref: '#/components/schemas/OffsetDateTime' - modificationUser: - type: string - modificationCount: - format: int32 - type: integer - name: - type: string - operator: - type: boolean - version: - type: string - description: - type: string - imageUrl: - type: string - basePath: - type: string - displayName: - type: string - iconName: - type: string - classifications: - type: array - uniqueItems: true - items: - type: string - ProductAbstract: - type: object - required: - - id - - name - properties: - id: - type: string - description: technical id for a product (unique). Can be used to fetch further product details. - name: - type: string - description: business key for identifying product - description: - type: string - description: textual description for a product. - imageUrl: - type: string - description: product image as url. - displayName: - type: string - description: name of the product used for displaying to user. - OffsetDateTime: - format: date-time - type: string - example: 2022-03-10T12:15:50-04:00 - ProblemDetailResponse: - type: object - properties: - errorCode: - type: string - detail: - type: string - params: - type: array - items: - $ref: '#/components/schemas/ProblemDetailParam' - invalidParams: - type: array - items: - $ref: '#/components/schemas/ProblemDetailInvalidParam' - ProblemDetailParam: - type: object - properties: - key: - type: string - value: - type: string - ProblemDetailInvalidParam: - type: object - properties: - name: - type: string - message: - type: string diff --git a/src/assets/api/product-store-bff-api.yaml b/src/assets/api/product-store-bff-api.yaml new file mode 100644 index 0000000..47a20af --- /dev/null +++ b/src/assets/api/product-store-bff-api.yaml @@ -0,0 +1,711 @@ +--- +openapi: 3.0.3 +info: + title: onecx-product-store-bff + description: Backend-For-Frontend (BFF) service for onecx product store. With this API you can manage applications (technical microfrontend(s)) and product(s) as logical abstraction. A Product is a versioned cover for a collection of applications (versioned) to be used within workspaces. Microfrontends (applications) which have reference to exposed/registered modules + version: 1.0.0 + contact: + email: 'tkit_dev@1000kit.org' + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html +servers: + - url: 'http://onecx-product-store-bff:8080' +tags: + - name: OneCX Product Store +paths: + /microfrontends: + post: + tags: + - Microfrontends + description: Create microfrontend + operationId: createMicrofrontend + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CreateMicrofrontendRequest' + responses: + '201': + description: New microfrontend created + headers: + Location: + required: true + schema: + type: string + format: url + content: + application/json: + schema: + $ref: '#/components/schemas/Microfrontend' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + /microfrontends/search: + post: + tags: + - Microfrontends + description: Search for microfrontend(s) by search criteria + operationId: searchMicrofrontends + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MicrofrontendSearchCriteria' + responses: + '200': + description: Corresponding microfrontends + content: + application/json: + schema: + $ref: '#/components/schemas/MicrofrontendPageResult' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + /microfrontends/{id}: + get: + tags: + - Microfrontends + description: Return microfrontend by ID + operationId: getMicrofrontend + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Microfrontend' + '404': + description: Not Found + put: + tags: + - Microfrontends + description: Update microfrontend by ID + operationId: updateMicrofrontend + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateMicrofrontendRequest' + responses: + '204': + description: Microfrontend updated + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + '404': + description: Microfrontend not found + delete: + tags: + - Microfrontends + description: Delete microfrontend by ID + operationId: deleteMicrofrontend + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + + /products: + post: + tags: + - Products + description: Create new product + operationId: createProduct + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CreateProductRequest' + responses: + '201': + description: New product created + headers: + Location: + required: true + schema: + type: string + format: url + content: + application/json: + schema: + $ref: '#/components/schemas/Product' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + /products/search: + post: + tags: + - Products + description: Search for products by search criteria + operationId: searchProducts + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ProductSearchCriteria' + responses: + '200': + description: Corresponding products (by search criteria) + content: + application/json: + schema: + $ref: '#/components/schemas/ProductPageResult' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + /products/{id}: + get: + tags: + - Products + description: Return product by ID + operationId: getProduct + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Product' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + put: + tags: + - Products + description: Update product by ID + operationId: updateProduct + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateProductRequest' + responses: + '204': + description: Product updated + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + '404': + description: Product not found + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + delete: + tags: + - Products + description: Delete product by ID + operationId: deleteProduct + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' +components: + schemas: + ProductPageResult: + type: object + properties: + totalElements: + format: int64 + description: The total elements in the resource (counted items in resultset). + type: integer + number: + format: int32 + type: integer + description: Number of page which has been queried (e.g. 2 of 10) + size: + format: int32 + type: integer + description: correlated to the input (pagesize)), how many products should be shown on a single page. + totalPages: + format: int64 + type: integer + description: representing the total amount of pages based on the size provided in the request. + stream: + type: array + description: result set of the given search criteria. + items: + $ref: '#/components/schemas/ProductAbstract' + ProductSearchCriteria: + type: object + properties: + name: + type: string + nullable: true + pageNumber: + format: int32 + description: The number of page. + default: 0 + type: integer + pageSize: + format: int32 + description: The size of page + default: 10 + minimum: 1 + exclusiveMinimum: false + type: integer + CreateProductRequest: + type: object + required: + - name + - version + - basePath + properties: + name: + type: string + version: + type: string + description: + type: string + imageUrl: + type: string + basePath: + type: string + displayName: + type: string + iconName: + type: string + classifications: + type: array + uniqueItems: true + items: + type: string + UpdateProductRequest: + type: object + required: + - name + - version + - basePath + properties: + name: + type: string + version: + type: string + description: + type: string + imageUrl: + type: string + basePath: + type: string + displayName: + type: string + iconName: + type: string + classifications: + type: array + uniqueItems: true + items: + type: string + Product: + type: object + required: + - id + - name + - basePath + properties: + id: + type: string + creationDate: + $ref: '#/components/schemas/OffsetDateTime' + creationUser: + type: string + modificationDate: + $ref: '#/components/schemas/OffsetDateTime' + modificationUser: + type: string + modificationCount: + format: int32 + type: integer + name: + type: string + operator: + type: boolean + version: + type: string + description: + type: string + imageUrl: + type: string + basePath: + type: string + displayName: + type: string + iconName: + type: string + classifications: + type: array + uniqueItems: true + items: + type: string + ProductAbstract: + type: object + required: + - id + - name + properties: + id: + type: string + description: technical id for a product (unique). Can be used to fetch further product details. + name: + type: string + description: business key for identifying product + description: + type: string + description: textual description for a product. + imageUrl: + type: string + description: product image as url. + displayName: + type: string + description: name of the product used for displaying to user. + OffsetDateTime: + format: date-time + type: string + example: 2022-03-10T12:15:50-04:00 + ProblemDetailResponse: + type: object + properties: + errorCode: + type: string + detail: + type: string + params: + type: array + items: + $ref: '#/components/schemas/ProblemDetailParam' + invalidParams: + type: array + items: + $ref: '#/components/schemas/ProblemDetailInvalidParam' + ProblemDetailParam: + type: object + properties: + key: + type: string + value: + type: string + ProblemDetailInvalidParam: + type: object + properties: + name: + type: string + message: + type: string + MicrofrontendPageResult: + type: object + properties: + totalElements: + format: int64 + description: The total elements in the resource. + type: integer + number: + format: int32 + type: integer + size: + format: int32 + type: integer + totalPages: + format: int64 + type: integer + stream: + type: array + items: + $ref: '#/components/schemas/MicrofrontendAbstract' + MicrofrontendAbstract: + required: + - id + - remoteBaseUrl + - productName + - appId + - appName + type: object + properties: + id: + type: string + appId: + type: string + appName: + type: string + description: + type: string + remoteBaseUrl: + type: string + productName: + type: string + MicrofrontendSearchCriteria: + type: object + properties: + appId: + type: string + nullable: true + appName: + type: string + nullable: true + productName: + type: string + nullable: true + pageNumber: + format: int32 + description: The number of page. + default: 0 + type: integer + pageSize: + format: int32 + description: The size of page + default: 10 + minimum: 1 + exclusiveMinimum: false + type: integer + CreateMicrofrontendRequest: + required: + - remoteEntry + - remoteBaseUrl + - productName + - appId + - appVersion + - appName + type: object + properties: + appId: + type: string + appVersion: + type: string + appName: + type: string + description: + type: string + remoteBaseUrl: + type: string + remoteEntry: + type: string + technology: + type: string + productName: + type: string + classifications: + type: array + uniqueItems: true + items: + type: string + contact: + type: string + iconName: + type: string + note: + type: string + exposedModule: + type: string + endpoints: + type: array + items: + $ref: '#/components/schemas/CreateUIEndpoint' + CreateUIEndpoint: + required: + - path + - name + type: object + properties: + path: + type: string + name: + type: string + UpdateMicrofrontendRequest: + required: + - remoteEntry + - remoteBaseUrl + - productName + - appId + - appVersion + - appName + type: object + properties: + appId: + type: string + appVersion: + type: string + appName: + type: string + description: + type: string + remoteBaseUrl: + type: string + remoteEntry: + type: string + productName: + type: string + technology: + type: string + classifications: + type: array + uniqueItems: true + items: + type: string + contact: + type: string + iconName: + type: string + note: + type: string + exposedModule: + type: string + endpoints: + type: array + items: + $ref: '#/components/schemas/UpdateUIEndpoint' + UpdateUIEndpoint: + required: + - path + - name + type: object + properties: + path: + type: string + name: + type: string + Microfrontend: + required: + - remoteEntry + - remoteBaseUrl + - productName + - appId + - appVersion + - appName + type: object + properties: + id: + type: string + creationDate: + $ref: '#/components/schemas/OffsetDateTime' + creationUser: + type: string + modificationDate: + $ref: '#/components/schemas/OffsetDateTime' + modificationUser: + type: string + modificationCount: + format: int32 + type: integer + operator: + type: boolean + appId: + type: string + appVersion: + type: string + appName: + type: string + description: + type: string + technology: + type: string + remoteBaseUrl: + type: string + remoteEntry: + type: string + productName: + type: string + classifications: + type: array + uniqueItems: true + items: + type: string + contact: + type: string + iconName: + type: string + note: + type: string + exposedModule: + type: string + endpoints: + type: array + items: + $ref: '#/components/schemas/UIEndpoint' + UIEndpoint: + required: + - path + - name + type: object + properties: + path: + type: string + name: + type: string diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 15379f3..f9b0b57 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -42,6 +42,16 @@ "DETAILS.TOOLTIP": "Anzeige Details", "NEW.TOOLTIP": "Erstelle neuen Eintrag" }, + "DATAVIEW": { + "FILTER": "Filter", + "FILTER_OF": "Filter für ", + "SORT_BY": "Sortiert nach", + "SORT_DIRECTION_ASC": "aufsteigend", + "SORT_DIRECTION_DESC": "absteigend", + "VIEW_MODE_GRID": "Kachelansicht", + "VIEW_MODE_LIST": "Listenansicht", + "VIEW_MODE_TABLE": "Tabellenansicht" + }, "CANCEL": "Abbrechen", "CHOOSE": "Auswählen", "SAVE": "Speichern", @@ -56,7 +66,7 @@ "DETAIL": "Details", "EDIT": "Ändern" }, - "DETAIL": { + "INTERNAL": { "CREATION_DATE": "Erstellt am", "CREATION_USER": "Erstellt von", "MODIFICATION_DATE": "Geändert am", @@ -68,14 +78,6 @@ "MODIFICATION_USER": "Name des Benutzers der letzten Änderung" } }, - "GENERAL": { - "COPY_OF": "Kopie von ", - "TOOLTIP": { - "VIEW_MODE_GRID": "Kachelansicht", - "VIEW_MODE_LIST": "Listenansicht", - "VIEW_MODE_TABLE": "Tabellenansicht" - } - }, "LOGO": { "LOGO_URL": "Logo URL", "TOOLTIPS": { @@ -85,43 +87,50 @@ }, "UPLOADED": "Datei hochgeladen" }, - "SEARCH": { - "FILTER": "Filter", - "FILTER_OF": "Filter für ", - "SORT_BY": "Sortiert nach", - "SORT_DIRECTION_ASC": "aufsteigend", - "SORT_DIRECTION_DESC": "absteigend" - }, - "PRODUCT": { + "DIALOG": { "SEARCH.HEADER": "Product Store", "SEARCH.SUBHEADER": "Produkte und deren Apps verwalten", "DETAIL.SUBHEADER": "Produkt Details", "LOAD_ERROR": "Produkt konnte nicht geladen werden", "NOT_FOUND": "Produkt nicht gefunden", - "NO_PROPERTIES": "Keine Farbwerte enthalten", "TABS": { + "APPS": "Apps", "INTERN": "Intern", "PROPERTIES": "Eigenschaften" - }, + } + }, + "PRODUCT": { "ID": "ID", "NAME": "Name", "VERSION": "Version", "DESCRIPTION": "Beschreibung", - "CREATION_DATE": "Erstellt am", - "CREATION_USER": "Erstellt von", - "MODIFICATION_DATE": "Geändert am", - "MODIFICATION_USER": "Geändert von", + "DISPLAY_NAME": "Anzeigename", "WORKSPACES": "Verwendet in Workspaces", "TOOLTIPS": { "ID": "Eindeutige technische ID des Produkts", "NAME": "Eindeutiger Name des Produkts", "VERSION": "Version des Produkts", "DESCRIPTION": "Beschreibung des Produkts", - "WORKSPACES": "Workspaces, die das Produkt benutzen", - "CREATION_DATE": "Erstellt am", - "CREATION_USER": "Erstellt von", - "MODIFICATION_DATE": "Geändert am", - "MODIFICATION_USER": "Geändert von" + "DISPLAY_NAME": "Anzeigename des Produkts", + "WORKSPACES": "Workspaces, die das Produkt benutzen" + } + }, + "EXCEPTIONS": { + "HTTP_STATUS_0": { + "PRODUCTS": "Unbekanntes Problem beim Abrufen von Produkte-Daten - Bitte versuchen sie es noch einmal.", + "APPS": "Unbekanntes Problem beim Abrufen von App-Daten - Bitte versuchen sie es noch einmal." + }, + "HTTP_STATUS_403": { + "PRODUCTS": "Sie haben keine Rechte um Produkte zu sehen.", + "APPS": "Sie haben keine Rechte um Apps zu sehen." + }, + "HTTP_STATUS_404": { + "PRODUCTS": "Es konnten keine Produkte gefunden werden.", + "APPS": "Es konnten keine Apps gefunden werden." + }, + "HTTP_STATUS_500": { + "PRODUCTS": "Unbekanntes Server-Problem beim Abrufen von Produkt-Daten - Bitte versuchen sie es noch einmal.", + "APPS": "Unbekanntes Server-Problem beim Abrufen von App-Daten - Bitte versuchen sie es noch einmal." } }, "VALIDATION": { @@ -134,23 +143,5 @@ "PATTERN_ERROR": "Ihre Eingabe entspricht nicht dem benötigten Format.", "FILETYPE_PATTERN_ERROR": "Ihre Datei entspricht nicht den erlaubten Formaten: .png, .jpg, .jpeg" } - }, - "EXCEPTIONS": { - "HTTP_STATUS_0": { - "PORTALS": "Unbekanntes Problem beim Abrufen von Workspace-Daten - Bitte versuchen sie es noch einmal.", - "MENUS": "Unbekanntes Problem beim Abrufen von Menü-Daten - Bitte versuchen sie es noch einmal." - }, - "HTTP_STATUS_403": { - "PORTALS": "Sie haben keine Rechte um Workspaces zu sehen.", - "MENUS": "Sie haben keine Rechte um Menüs zu sehen." - }, - "HTTP_STATUS_404": { - "PORTALS": "Es konnten keine Workspaces gefunden werden.", - "MENUS": "Es konnten keine Menüs gefunden werden." - }, - "HTTP_STATUS_500": { - "PORTALS": "Unbekanntes Server-Problem beim Abrufen von Workspace-Daten - Bitte versuchen sie es noch einmal.", - "MENUS": "Unbekanntes Server-Problem beim Abrufen von Menü-Daten - Bitte versuchen sie es noch einmal." - } } } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index ff38797..32585f3 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -42,6 +42,16 @@ "DETAILS.TOOLTIP": "Display details", "NEW.TOOLTIP": "Create new entry" }, + "DATAVIEW": { + "FILTER": "Filter", + "FILTER_OF": "Filter for ", + "SORT_BY": "Sort By", + "SORT_DIRECTION_ASC": "ascending", + "SORT_DIRECTION_DESC": "descending", + "VIEW_MODE_GRID": "Tile view", + "VIEW_MODE_LIST": "List view", + "VIEW_MODE_TABLE": "Table view" + }, "CANCEL": "Cancel", "CHOOSE": "Choose", "SAVE": "Save", @@ -56,7 +66,7 @@ "DETAIL": "Details", "EDIT": "Edit" }, - "DETAIL": { + "INTERNAL": { "CREATION_DATE": "Created on", "CREATION_USER": "Created by", "MODIFICATION_DATE": "Changed on", @@ -68,14 +78,6 @@ "MODIFICATION_USER": "Name of the user of the last change" } }, - "GENERAL": { - "COPY_OF": "Copy of ", - "TOOLTIP": { - "VIEW_MODE_GRID": "Tile view", - "VIEW_MODE_LIST": "List view", - "VIEW_MODE_TABLE": "Table view" - } - }, "LOGO": { "LOGO_URL": "Logo URL", "TOOLTIPS": { @@ -85,43 +87,50 @@ }, "UPLOADED": "File uploaded" }, - "SEARCH": { - "FILTER": "Filter", - "FILTER_OF": "Filter for ", - "SORT_BY": "Sort By", - "SORT_DIRECTION_ASC": "ascending", - "SORT_DIRECTION_DESC": "descending" - }, - "PRODUCT": { + "DIALOG": { "SEARCH.HEADER": "Product Store", "SEARCH.SUBHEADER": "Viewing and Managing Products and their Apps", "DETAIL.SUBHEADER": "Product Details", "LOAD_ERROR": "Failed to load Product", "NOT_FOUND": "Product was not found", - "NO_PROPERTIES": "No properties specified", "TABS": { + "APPS": "Apps", "INTERN": "Internal", "PROPERTIES": "Properties" - }, + } + }, + "PRODUCT": { "ID": "ID", "NAME": "Name", "VERSION": "Version", "DESCRIPTION": "Description", - "CREATION_DATE": "Created on", - "CREATION_USER": "Created by", - "MODIFICATION_DATE": "Changed on", - "MODIFICATION_USER": "Changed by", + "DISPLAY_NAME": "Display Name", "WORKSPACES": "Used in Workspaces", "TOOLTIPS": { "ID": "Unique technical ID of the Product", "NAME": "Unique Name of the Product", "VERSION": "Version of the Product", "DESCRIPTION": "Description of the Product", - "WORKSPACES": "Workspaces using the Product", - "CREATION_DATE": "Timestamp the Product was created", - "CREATION_USER": "Name of the user which created the Product", - "MODIFICATION_DATE": "Timestamp the Product was latest modified", - "MODIFICATION_USER": "Name of the user which changed the Product last time" + "DISPLAY_NAME": "Display Name of the Product", + "WORKSPACES": "Workspaces using the Product" + } + }, + "EXCEPTIONS": { + "HTTP_STATUS_0": { + "PRODUCTS": "Unknown problem retrieving Product data - please try again.", + "APPS": "Unknown problem retrieving App data - please try again." + }, + "HTTP_STATUS_403": { + "PRODUCTS": "You have no permissions to see Products.", + "APPS": "You have no permissions to see Apps." + }, + "HTTP_STATUS_404": { + "PRODUCTS": "No Products could be found.", + "APPS": "No Apps could be found." + }, + "HTTP_STATUS_500": { + "PRODUCTS": "Unknown server problem retrieving Product data - please try again.", + "APPS": "Unknown server problem retrieving App data - please try again." } }, "VALIDATION": { @@ -134,23 +143,5 @@ "PATTERN_ERROR": "Your input does not match the required pattern", "FILETYPE_PATTERN_ERROR": "Your file does not match the allowed filetypes: .png, .jpg, .jpeg" } - }, - "EXCEPTIONS": { - "HTTP_STATUS_0": { - "PORTALS": "Unknown problem retrieving Workspace data - please try again.", - "MENUS": "Unknown problem retrieving menu data - please try again." - }, - "HTTP_STATUS_403": { - "PORTALS": "You have no permissions to see workspaces.", - "MENUS": "You have no permissions to see menus." - }, - "HTTP_STATUS_404": { - "PORTALS": "No Workspaces could be found.", - "MENUS": "No menus could be found." - }, - "HTTP_STATUS_500": { - "PORTALS": "Unknown server problem retrieving Workspace data - please try again.", - "MENUS": "Unknown server problem retrieving menu data - please try again." - } } }