{"version":3,"sources":["components/Filtering/QueryContext.ts","stores/TelemetryCollector.ts","components/Filtering/Filter.tsx","services/InRiverApiClient.ts","InRiverApiClient/ChannelHttpSvc.ts","InRiverApiClient/EntityHttpSvc.ts","InRiverApiClient/LinkHttpSvc.ts","InRiverApiClient/MediaHttpSvc.ts","InRiverApiClient/ModelHttpSvc.ts","InRiverApiClient/QueryHttpSvc.ts","InRiverApiClient/SyndicateHttpSvc.ts","InRiverApiClient/SystemHttpSvc.ts","InRiverApiClient/WorkareaHttpSvc.ts","stores/DetailsStore.ts","stores/ModelStore.ts","stores/SearchStore.ts","stores/UserStore.ts","stores/CatalogStore.ts","contexts/index.tsx","hooks/UseStores.tsx","components/Filtering/QueryContextWrapper.tsx","components/Filtering/CvlFilter.tsx","components/Filtering/EntityTypeFilter.tsx","components/EntityList/EntityListContext.ts","components/EntityList/EntityListContextWrapper.tsx","components/EntityList/Entities.tsx","components/EntityList/EntityList.tsx","components/EntityList/ShowMoreButton.tsx","components/ProductCard.tsx","components/Filtering/MultiSelectCvlFilter.tsx","components/Filtering/FilterGroup.tsx","components/Filtering/HierarchyCvlFilter.tsx","components/Filtering/FieldValueFilter.tsx","components/Loader.tsx","pages/catalog.tsx","components/InternalDescription.tsx","components/ExternalDescription.tsx","components/Benefits.tsx","components/DescriptionAndBenefits.tsx","components/ProductDetails.tsx","components/CompatibleTurbine.tsx","components/AvailabilityAndContact.tsx","components/Documentation.tsx","components/EntityList/ShowAll.tsx","components/RelatedServices.tsx","components/NavigationBar.tsx","components/LanguageSelector.tsx","components/ServiceInfo.tsx","components/ServiceTop.tsx","pages/details.tsx","components/SearchBar.tsx","components/SiteHeader.tsx","components/Error.tsx","components/PageTracker.tsx","App.tsx","indexApp.tsx","adalConfig.ts","index.tsx"],"names":["Filtering_QueryContext","react","query","combinedQuery","recordEvent","key","value","jsonString","JSON","stringify","Event","Object","adalConfig","tokenError","token","client","window","location","protocol","host","set","send","then","Filter_Filter","[object Object]","props","super","this","state","queries","Map","getCombinedQuery","map","children","filter","index","getKey","String","get","Provider","updateQuery","q","cvls","cvlValues","entityTypes","language","prevProps","prevState","onQueryChanged","prevQuery","RecordCategoryChangeIfUpdated","underscore","nextState","forEach","v","k","setState","dataCriteria","oldCategory","c","fieldTypeId","oldSubCategory","newCategory","newSubCategory","undefined","result","Array","from","values","reduce","acc","a","concat","systemCriteria","element","baseUrl","entityHttpSvc","forEntityId","includeChannels","includePublications","params","Promise","resolve","reject","end","error","res","body","channelId","entityTypeId","entityId","linkDirection","linkTypeId","path","entityTypeIds","fetchObjectsModel","entityCreationModel","fieldSetId","allFields","mapUniqueValuesModel","fieldTypeIds","specificationFieldTypeIds","mandatoryOnly","specificationValueModels","fieldValueModels","setFieldSetModel","setSpecificationTemplateModel","setSegmentModel","base64FileModel","urlFileModel","commentModel","commentId","entityIds","modelHttpSvc","linkId","linkModel","linkModels","cvlId","cvlValueModel","templateId","queryHttpSvc","queryModel","orderBy","syndicationId","settingNames","forUsername","includeCreatedByMe","includeShared","workareaFolderId","workareaFolderModel","creationModel","DetailsStore_DetailsStore","modelVariants","isLoaded","contactMail","fallbackLanguage","fallbackPrefix","selectedDocumentationBrandKey","selectedDocumentationModelKey","selectedDocumentationModelVariantKey","getGetAllCvlValues","model","addToCvlValues","getContactMail","id","setLoadedStatus","entityBundle","getGetEntityBundle","bundle","setEntityBundle","setError","serviceInfoData","externalDescription","getStringField","name","sapMaterialID","developmentStage","getCvlValuesField","imageUrls","getImagesFromResources","keyDetails","generateKeyDetailList","scope","getField","serviceTopData","relatedServices","list","outbound","links","f","link","summary","fields","entity","push","compatibleTurbinesList","resultList","modelVariantField","modelField","modelKeys","toString","split","includes","brandFromKey","substring","brand","mark","mw","subkey","cvl","cvlKey","modelFromKey","length","brandValue","modelValue","mkValue","mwValue","operator","postQuery","count","foundMVEntityId","addModelVariant","modelVariant","lang","serviceName","benefits","internalDescription","contacts","area","person","details","commercialName","industry","businessArea","segment","category","commercialCategory","commercialSubCategory","approvedForExternalPublication","countries","sbus","technicalDocumentation","getDocumentation","commercialDocumentation","filteredCommercialDocumentation","filterOnSelectedKeys","filteredTechnicalDocumentation","status","allDocumentationBrands","allBrands","doc","brands","newBrand","existingBrand","filteredDocumentationModels","allModels","models","newModel","existingModel","parentKey","filteredDocumentationModelVariants","allModelVariants","newModelVariant","existingModelVariant","field","fieldValue","keys","keyArray","cvlValue","find","localeString","CVLId","localeStringParam","arrayToAdd","queryResult","getGetFieldValues","setContactEmail","fieldValues","type","getDataEntity","data","some","mv","fieldDataType","getStringValue","nameValue","linkValue","subTypeValue","languages","brandsValue","GetCVLValueModelsField","modelsValue","modelVariantsValue","languageString","join","subType","toUpperCase","resource","resourceUrl","currentLanguageString","defaultLanguageString","replace","__decorate","mobx_module","cvlValuesToFetch","ModelStore_ModelStore","ready","all","loadPIMLanguages","loadEntityTypes","loadCvls","loadCvlValue","x","setReady","pimLanguages","getGetAllEntityTypes","setEntityTypes","getGetAllCvls","setCvls","setCvlValues","getGetAllLanguages","setPIMLanguages","ModelStore_decorate","SearchStore_SearchStore","modelStore","isSearching","primaryResultIds","excludedResultIds","searchString","searchPromise","resultEntityIds","ids","primaryDataCriteria","criteria","modelsDataCriteria","modelVariantDataCriteria","primaryQuery","calculateExcludedResultsByModelVariantCriteria","addAllValueToCriteriaValue","p","setPrimaryResultIds","str","selectedKey","cvlValuesFound","cvlFound","selectedModelVariantKey","parentParentKey","getParentParentKey","inverseQuery","inverseResult","setExcludedResultsIds","modelVariantCvlValuesFound","modelVariantCVLFound","modelVariantParentKey","parentsCvlValuesFound","parentCVLFound","SearchStore_decorate","UserStore_UserStore","setFullName","text","fullName","UserStore_decorate","CatalogStore","businessAreaQuery","categoryQuery","brandQuery","turbineQuery","modelQuery","sbuQuery","countryQuery","developmentStageQuery","businessAreaQueryValue","getCvlValueFromQueryModel","categoryQueryValue","brandQueryValue","turbineQueryValue","modelQueryValue","sbuQueryValue","countryQueryValue","developmentStageQueryValue","getCvlValueFromDataCriteria","fieldType","flatMap","fieldTypes","criteriaValue","isMultiValue","dataType","CatalogStore_decorate","browserHistory","createBrowserHistory_default","routingStoreInternal","mobx_react_router","historyInternal","detailsStoreInternal","modelStoreInternal","storesContext","detailsStore","routingStore","searchStore","userStore","catalogStore","contexts_history","useStores","WrapQueryContext","WrappedComponent","decorated","Consumer","context","wrappedContext","queryChanged","assign","contextType","Filtering_CvlFilter","entityType","getEntityType","getFieldType","getCvl","validCvlValues","getValidCvlValues","valuesInLocale","getCvlValuesInLocale","availableOptions","allLabel","currentOption","getCurrentSettingFromQuery","htmlFor","className","label","onChange","createChangeHandler","currentSetting","parentId","parentCvl","parentFieldTypes","ft","parentCvlKeys","acceptedStructure","pft","filters","dc","val","accepts","currentVal","validParentKeys","pcvl","cvlval","e","target","Filtering_EntityTypeFilter","newQuery","EntityList_EntityListContext","allIds","visibleIds","WrapEntityListContext","displayName","EntityList_Entities","entities","promise","renderCall","fetchData","postFetchData","objects","err","onError","EntityList_EntityList","setVisibleIds","EntityList_ShowMoreButton","setInitialVisibleEntities","onClick","showMore","slice","initialNumberOfShownEntities","increment","getCvlValue","ProductCard","mobx_react_module","nameField","businessAreaCvlValue","categoryCvlValue","isLocalVariant","imageSrc","react_router_dom","to","src","alt","Filtering_MultiSelectCvlFilter","settings","changeHandler","checked","updateQueryCallback","event","newSettings","Filtering_FilterGroup","Filtering_HierarchyCvlFilter","getValidatedFieldTypes","hierarchy","getHierarchyStructure","renderItem","isExpanded","renderSublist","subItems","entry","href","preventDefault","updateOrClearQuery","isSelected","parentCvlKey","first","setting","getCurrentSetting","subItemlist","selected","next","i","curr","prev","parentCvlId","Filtering_FieldValueFilter","Loader","filterCvlValues","Catalog","hide","setQuery","test","setBusinessAreaQuery","setCategoryQuery","setBrandQuery","setTurbineQuery","setModelQuery","setSbuQuery","setCountryQuery","setDevelopmentStageQuery","setSearchString","s","InternalDescription","react_markdown","source","ExternalDescription","Benefits","DescriptionAndBenefits","ProductDetails","detail","CompatibleTurbines","turbinesShowLimit","setTurbineShowLimit","turbineList","compatibleTurbineSection","turbineListParam","Set","turbine","turbineIndex","t","modelIndex","mwIndex","section","showAllClassName","AvailabilityAndContacts","sbusStringToShow","countriesStringToShow","contact","generateDocumentationSection","documentation","document","Documentation","defaultValue","selectedValue","setSelectedDocumentationBrandKey","currentTarget","disabled","setSelectedDocumentationModelKey","setSelectedDocumentationModelVariantKey","EntityList_ShowAll","RelatedServices","mainClassName","scrollTo","barRef","ref","height","current","clientHeight","padding","offsetTop","inactiveClassName","activeClassName","NavigationBar","descriptionAndBenefitsClassName","setDescriptionAndBenefitsClassName","detailsClassName","setDetailsClassName","compatibleTurbinesClassName","setCompatibleTurbinesClassName","availabilityClassName","setAvailabilityClassName","documentationClassName","setDocumentationClassName","relatedServiceClassName","setRelatedServiceClassName","findCurrentElementAndSetActive","position","barHeight","descriptionAndBenefitsPosition","descriptionAndBenefitsRef","detailsPosition","detailsRef","compatibleTurbinesPosition","compatibleTurbinesRef","availabilityPosition","availabilityRef","documentationPosition","documentationRef","relatedServicesPosition","relatedServicesRef","onScroll","pageYOffset","addEventListener","removeEventListener","LanguageSelector","setLanguage","ServiceInfo","imageIndex","setImageIndex","showMoreDescription","setShowMoreDescription","languageSelectorVisible","setLanguageSelectorVisible","description","languageSelectorRef","handleClickOutside","contains","useOutsideAlerter","url","renderers","paragraph","ServiceTop","subject","mailString","Details","SearchBar","onCatalog","pathname","onSubmit","placeholder","SiteHeader","resetQueries","Error","PageTracker","history","startsWith","detailsObject","item","dataLayer","pageUri","vestasSapMaterialId","vestasProductName","vestasAdditionalData","App","react_router","SetDetailsId","setEntityId","react_dom","getElementById","__webpack_require__","d","__webpack_exports__","authContext","requestWithToken","react_adal__WEBPACK_IMPORTED_MODULE_0__","tenant","redirectUri","clientId","uri","indexOf","endpoints","api","cacheLocation","func","acquireToken","r","_adalConfig__WEBPACK_IMPORTED_MODULE_1__"],"mappings":"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","file":"static/js/main.f7b64466.chunk.js","sourcesContent":["import * as React from 'react';\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, ICVLValueModel } from '../../InRiverApiClient/models';\r\n\r\nexport interface IQueryContextValue {\r\n query: IQueryModel,\r\n updateQuery: (IQueryModel) => void,\r\n combinedQuery: IQueryModel,\r\n entityTypes: IEntityTypeModel[],\r\n cvls: ICVLModel[],\r\n cvlValues: Map,\r\n language: string\r\n}\r\n\r\nconst QueryContext = React.createContext({\r\n query: {},\r\n combinedQuery: {}\r\n} as IQueryContextValue);\r\n\r\nexport default QueryContext;","import * as request from \"superagent\";\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport function recordEvent(key: string, value: string) {\r\n const jsonString = JSON.stringify({ [\"Event\"]: key + \"_\" + value });\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${window.location.protocol}//${window.location.host}/AppInsights/event`)\r\n .set('Authorization', `bearer ${token}`)\r\n .set('Content-Type', 'application/json')\r\n .send(jsonString)\r\n .then();\r\n })\r\n}","import * as React from \"react\";\r\nimport QueryContext from \"./QueryContext\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, ICVLValueModel } from \"../../InRiverApiClient/models\";\r\nimport * as _ from \"underscore\";\r\nimport { recordEvent } from \"src/stores/TelemetryCollector\";\r\n\r\nexport interface IFilterProps{\r\n entityTypes: IEntityTypeModel[],\r\n cvls: ICVLModel[],\r\n cvlValues: Map,\r\n language: string,\r\n onQueryChanged?: (IQueryModel) => void\r\n}\r\n\r\nexport interface IFilterState {\r\n queries: Map,\r\n \r\n}\r\n\r\nexport class Filter extends React.Component{\r\n constructor(props) {\r\n super(props);\r\n this.state = { queries: new Map() }\r\n }\r\n\r\n public render() {\r\n const combinedQuery = this.getCombinedQuery(this.state);\r\n return
\r\n {\r\n React.Children.map(this.props.children, (filter, index) => {\r\n const key = this.getKey(filter) || String(index);\r\n const query = this.state && this.state.queries && this.state.queries.get(key) ? this.state.queries.get(key) as IQueryModel: {} as IQueryModel;\r\n const updateQuery = q => this.updateQuery(key, q);\r\n return \r\n {filter}\r\n \r\n })\r\n}\r\n
\r\n }\r\n\r\n public componentDidUpdate(prevProps: IFilterProps, prevState: IFilterState) {\r\n if (this.props.onQueryChanged) {\r\n const prevQuery = this.getCombinedQuery(prevState);\r\n const query = this.getCombinedQuery(this.state);\r\n this.RecordCategoryChangeIfUpdated(prevQuery, query)\r\n if (!_.isEqual(prevQuery, query)) {\r\n this.props.onQueryChanged(query);\r\n }\r\n }\r\n }\r\n \r\n private updateQuery(key, query: IQueryModel) {\r\n const nextState: IFilterState = { queries: new Map() };\r\n this.state.queries.forEach((v, k) => nextState.queries.set(k, v));\r\n nextState.queries.set(key, query);\r\n this.setState(nextState);\r\n }\r\n\r\n private RecordCategoryChangeIfUpdated(prevQuery: IQueryModel, query: IQueryModel){\r\n if (prevQuery && prevQuery.dataCriteria && query && query.dataCriteria) {\r\n const oldCategory = prevQuery.dataCriteria.filter(c => c.fieldTypeId === \"ServiceCommercialCategory\")[0]\r\n const oldSubCategory = prevQuery.dataCriteria.filter(c => c.fieldTypeId === \"ServiceCommercialSubCategory\")[0]\r\n \r\n const newCategory = query.dataCriteria.filter(c => c.fieldTypeId === \"ServiceCommercialCategory\")[0]\r\n const newSubCategory = query.dataCriteria.filter(c => c.fieldTypeId === \"ServiceCommercialSubCategory\")[0]\r\n if (newCategory) {\r\n if (oldCategory === undefined || oldCategory.value !== newCategory.value) {\r\n recordEvent(\"Category\",newCategory.value)\r\n }\r\n }\r\n if (newSubCategory) {\r\n if (oldSubCategory === undefined || oldSubCategory.value !== newSubCategory.value) {\r\n recordEvent(\"Category\",newSubCategory.value)\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getCombinedQuery(state: IFilterState | undefined) { \r\n if (!state) {\r\n return {} as IQueryModel;\r\n }\r\n const result = Array.from(state.queries.values()).reduce((acc, a) => {\r\n if (!a) {\r\n return acc;\r\n }\r\n\r\n if (a.dataCriteria) {\r\n acc.dataCriteria = acc.dataCriteria ? acc.dataCriteria.concat(a.dataCriteria) : a.dataCriteria;\r\n }\r\n\r\n if (a.systemCriteria) {\r\n acc.systemCriteria = acc.systemCriteria ? acc.systemCriteria.concat(a.systemCriteria) : a.systemCriteria;\r\n }\r\n\r\n return acc;\r\n }, {} as IQueryModel)\r\n\r\n if (!result) {\r\n return {} as IQueryModel;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getKey(a: any) {\r\n const element = a as React.ReactElement;\r\n if (element && element.key) {\r\n return String(element.key);\r\n }\r\n return undefined;\r\n }\r\n}\r\n","import { ChannelHttpSvc } from \"../InRiverApiClient/ChannelHttpSvc\";\r\nimport { EntityHttpSvc } from \"../InRiverApiClient/EntityHttpSvc\";\r\nimport { LinkHttpSvc } from \"../InRiverApiClient/LinkHttpSvc\";\r\nimport { MediaHttpSvc } from \"../InRiverApiClient/MediaHttpSvc\";\r\nimport { ModelHttpSvc } from \"../InRiverApiClient/ModelHttpSvc\";\r\nimport { QueryHttpSvc } from \"../InRiverApiClient/QueryHttpSvc\";\r\nimport { SyndicateHttpSvc } from \"../InRiverApiClient/SyndicateHttpSvc\";\r\nimport { SystemHttpSvc } from \"../InRiverApiClient/SystemHttpSvc\";\r\nimport { WorkareaHttpSvc } from \"../InRiverApiClient/WorkareaHttpSvc\";\r\n\r\nconst baseUrl = `${window.location.protocol}//${window.location.host}/InRiverApi`;\r\n\r\nexport const channelHttpSvc = new ChannelHttpSvc(baseUrl);\r\nexport const entityHttpSvc = new EntityHttpSvc(baseUrl);\r\nexport const linkHttpSvc = new LinkHttpSvc(baseUrl);\r\nexport const mediaHttpSvc = new MediaHttpSvc(baseUrl);\r\nexport const modelHttpSvc = new ModelHttpSvc(baseUrl);\r\nexport const queryHttpSvc = new QueryHttpSvc(baseUrl);\r\nexport const syndicateHttpSvc = new SyndicateHttpSvc(baseUrl);\r\nexport const systemHttpSvc = new SystemHttpSvc(baseUrl);\r\nexport const workareaHttpSvc = new WorkareaHttpSvc(baseUrl);","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { IChannelSummaryModel, IEntityListModel, IStructureEntityModel, IChannelPathContentModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\n\r\nexport class ChannelHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public getGetChannelsForEntityId( forEntityId?:number , includeChannels?:boolean , includePublications?:boolean ):Promise>{\r\n const params = {\r\n \"forEntityId\":forEntityId,\r\n \"includeChannels\":includeChannels,\r\n \"includePublications\":includePublications\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getEntityTypes( channelId?:number ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/${channelId}/entitytypes`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetByLinkEntityType( channelId?:number , entityTypeId?:string ):Promise{\r\n const params = {\r\n \"entityTypeId\":entityTypeId\r\n };\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/${channelId}/entitylist`)\r\n .set('Authorization', `bearer ${token}`)\r\n .query(params)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntityListModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetByEntityType( channelId?:number , entityId?:number , linkDirection?:string , linkTypeId?:string ):Promise{\r\n const params = {\r\n \"linkDirection\":linkDirection,\r\n \"linkTypeId\":linkTypeId\r\n };\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/${channelId}/entities/{entityId}/links`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntityListModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetChannelNodesAll( channelId?:number , entityId?:number ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/${channelId}/entities/{entityId}/structureentities`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetChannelNodes( channelId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/${channelId}/nodes`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetChannelNodeTree( channelId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/${channelId}/nodetree`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getChannelContent( path?:string , entityTypeIds?:string ):Promise{\r\n const params = {\r\n \"entityTypeIds\":entityTypeIds\r\n };\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/channels/content/${path}`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IChannelPathContentModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { IEntityDataModel,IFetchObjectsModel,IEntitySummaryModel,IEntityCreationModel,IMapUniqueValuesModel,IFieldSummaryModel,ISpecificationValueModel,IFieldValueModel,ISetFieldSetModel,ISpecificationValueSummaryModel,ISetSpecificationTemplateModel,ISetSegmentModel,ILinkModel,IEntityBundleModel,IMediaInfoModel,IBase64FileModel,IUrlFileModel,IExeternalUrlFileModel,ICommentModel,ISegment } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class EntityHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public postFetchData( fetchObjectsModel?:IFetchObjectsModel ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities:fetchdata`)\r\n .send(fetchObjectsModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetEntitySummary( entityId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/summary`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntitySummaryModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public deleteDeleteEntity( entityId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .delete(`${this.baseUrl}/api/v1.0.0/entities/${entityId}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postCreateEntity( entityCreationModel?:IEntityCreationModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities:createnew`)\r\n .send(entityCreationModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntitySummaryModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetEmptyEntity( entityTypeId?:string , fieldSetId?:string , allFields?:boolean ):Promise{\r\n const params = {\r\n \"entityTypeId\":entityTypeId,\r\n \"fieldSetId\":fieldSetId,\r\n \"allFields\":allFields\r\n };\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities:getempty`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntityCreationModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postMapUniqueValues( mapUniqueValuesModel?:IMapUniqueValuesModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities:mapuniquevalues`)\r\n .send(mapUniqueValuesModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getCompletenessDetails( entityId?:number ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/completenessdetails`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetFields( entityId?:number , fieldTypeIds?:string ):Promise>{\r\n const params = {\r\n \"fieldTypeIds\":fieldTypeIds\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/summary/fields`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetSpecificationValues( entityId?:number , specificationFieldTypeIds?:string , mandatoryOnly?:boolean ):Promise>{\r\n const params = {\r\n \"specificationFieldTypeIds\":specificationFieldTypeIds,\r\n \"mandatoryOnly\":mandatoryOnly\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/specificationvalues`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putGetFields( entityId?:number , specificationValueModels?:Array ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/specificationvalues`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetFieldValues( entityId?:number , fieldTypeIds?:string ):Promise>{\r\n const params = {\r\n \"fieldTypeIds\":fieldTypeIds\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/fieldvalues`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putSetFieldValues( entityId?:number , fieldValueModels?:Array ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/fieldvalues`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getFieldHistory( entityId?:number , fieldTypeId?:string ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/fieldvalues/{fieldTypeId}/revisions`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntitySummaryModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putSetFieldSet( entityId?:number , setFieldSetModel?:ISetFieldSetModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/fieldset`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntitySummaryModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetSpecificationSummary( entityId?:number , specificationFieldTypeIds?:string ):Promise>{\r\n const params = {\r\n \"specificationFieldTypeIds\":specificationFieldTypeIds\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/summary/specification`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putSetSpecificationTemplate( entityId?:number , setSpecificationTemplateModel?:ISetSpecificationTemplateModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/specificationtemplate`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntitySummaryModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putSetSegment( entityId?:number , setSegmentModel?:ISetSegmentModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/segment`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntitySummaryModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetLinksForEntity( entityId?:number , linkDirection?:string , linkTypeId?:string ):Promise>{\r\n const params = {\r\n \"linkDirection\":linkDirection,\r\n \"linkTypeId\":linkTypeId\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/links`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetEntityBundle( entityId?:number , fieldTypeIds?:string , linkDirection?:string , linkTypeId?:string ):Promise{\r\n const params = {\r\n \"fieldTypeIds\":fieldTypeIds,\r\n \"linkDirection\":linkDirection,\r\n \"linkTypeId\":linkTypeId\r\n };\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/linksandfields`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntityBundleModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllMedia( entityId?:number ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/media`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetMediaDetails(entityId?: number): Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/mediadetails`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postUploadBase64File( entityId?:number , base64FileModel?:IBase64FileModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/media:uploadbase64`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IMediaInfoModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postUploadMediaFromUrl(entityId?: number, urlFileModel?: IUrlFileModel): Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/media:uploadfromurl`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IMediaInfoModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postAddExternalUrl( entityId?:number , urlFileModel?:IExeternalUrlFileModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/media:addexternalurl`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IMediaInfoModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getComments( entityId?:number ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/comments`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postCreateComment(entityId?: number, commentModel?: ICommentModel): Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/comments`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public deleteDeleteComment(entityId?: number, commentId?: number): Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .delete(`${this.baseUrl}/api/v1.0.0/entities/${entityId}/comments/{commentId}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getStarredEntities():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/starred`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putUpdateStarredEntities(entityIds?: Array): Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/entities/starred`)\r\n .send(entityIds)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllSegments():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/entities/segments`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { ILinkModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class LinkHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public getGetLink( linkId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/links/${linkId}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as ILinkModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public deleteDeleteLink( linkId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .delete(`${this.baseUrl}/api/v1.0.0/links/${linkId}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postCreateLink( linkModel?:ILinkModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/links`)\r\n .send(linkModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as ILinkModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putUpdateLink( linkModels?:Array ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/links/sortorder`)\r\n .send(linkModels)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { IMediaInfoModel,IBase64FileModelWithLink,IUrlFileModelWithLink,IExternalUrlFileModelWithLink } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class MediaHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public postUploadBase64File( base64FileModel?:IBase64FileModelWithLink ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/media:uploadbase64`)\r\n .send(base64FileModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IMediaInfoModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postUploadMediaFromUrl( urlFileModel?:IUrlFileModelWithLink ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/media:uploadfromurl`)\r\n .send(urlFileModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IMediaInfoModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postAddExternalUrl( urlFileModel?:IExternalUrlFileModelWithLink ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/media:addexternalurl`)\r\n .send(urlFileModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IMediaInfoModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\n\r\nimport * as request from \"superagent\";\r\nimport { IEntityTypeModel,ILanguageModel,IFieldSetModel,ICVLModel,ICVLValueModel,IEntitySummaryModel,ISpecificationFieldTypeModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class ModelHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public getGetAllEntityTypes( entityTypeIds?:string ):Promise>{\r\n const params = {\r\n \"entityTypeIds\":entityTypeIds\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/entitytypes`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllLanguages():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/languages`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllFieldSets():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/fieldsets`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllCvls():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/cvls`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllCvlValues( cvlId?:string ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/cvls/${cvlId}/values`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postCreateCvlValue( cvlId?:string , cvlValueModel?:ICVLValueModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/model/cvls/${cvlId}/values`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as ICVLValueModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetCvlValue( cvlId?:string , key?:string ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/cvls/${cvlId}/values/${key}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as ICVLValueModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putUpdateCvlValue( cvlId?:string , key?:string , cvlValueModel?:ICVLValueModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/model/cvls/${cvlId}/values/${key}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as ICVLValueModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public deleteDeleteCvlValue( cvlId?:string , key?:string ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .delete(`${this.baseUrl}/api/v1.0.0/model/cvls/${cvlId}/values/${key}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetAllSpecificationTemplates():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/specificationtemplates`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetSpecificationTemplatesields( templateId?:number ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/model/specificationtemplates/${templateId}/fieldtypes`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { IEntityListModel,IQueryModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class QueryHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public postQuery( queryModel?:IQueryModel, orderBy?:string ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/query`)\r\n .query(orderBy && { orderBy })\r\n .send(queryModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntityListModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { ISyndicationModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class SyndicateHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public getSyndications():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/syndications`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postRunSyndicate( syndicationId?:number ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/syndications/${syndicationId}:run`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { IImageConfigurationDetailsModel,IRoleModel,ISegmentModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class SystemHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public getGetAllImageConfigurations():Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/system/imageconfigurations`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetImageConfigurationDetails():Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/system/imageconfigurationdetails`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IImageConfigurationDetailsModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getGetServerSettings( settingNames?:string ):Promise{\r\n const params = {\r\n \"settingNames\":settingNames\r\n };\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/system/serversettings`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getRoles( forUsername?:string ):Promise>{\r\n const params = {\r\n \"forUsername\":forUsername\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/system/roles`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getSegments( forUsername?:string ):Promise>{\r\n const params = {\r\n \"forUsername\":forUsername\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/system/segments`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","/*****************************AutoGenerated Code : Do not edit *******************************/\r\n// Type generated from Swagger definition\r\n\r\n/* tslint:disable:max-classes-per-file */\r\n/* tslint:disable:array-type */\r\n\r\nimport * as request from \"superagent\";\r\nimport { IWorkareaFolderModel,IWorkareaTreeFolderModel,IEntityListModel,IQueryModel,IWorkareaCreationModel } from \"./models\"\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport class WorkareaHttpSvc {\r\n private baseUrl: string = \"\";;\r\n\r\n public constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl;\r\n }\r\n \r\n public getWorkareaFolders( includeCreatedByMe?:boolean , includeShared?:boolean , forUsername?:string ):Promise>{\r\n const params = {\r\n \"includeCreatedByMe\":includeCreatedByMe,\r\n \"includeShared\":includeShared,\r\n \"forUsername\":forUsername\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/workareafolders`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getWorkareaFolderTree( includeCreatedByMe?:boolean , includeShared?:boolean , forUsername?:string ):Promise>{\r\n const params = {\r\n \"includeCreatedByMe\":includeCreatedByMe,\r\n \"includeShared\":includeShared,\r\n \"forUsername\":forUsername\r\n };\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/workareafoldertree`)\r\n .query(params)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getWorkareaQueryResult( workareaFolderId?:string ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/workareafolder/${workareaFolderId}/entitylist`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IEntityListModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putUpdateWorkareaQuery( workareaFolderId?:string , queryModel?:IQueryModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/workareafolder/${workareaFolderId}/query`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IWorkareaFolderModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public getWorkareaFolderEntityIds( workareaFolderId?:string ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${this.baseUrl}/api/v1.0.0/workareafolder/${workareaFolderId}/entityIds`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putWorkareaFolderEntityIds( workareaFolderId?:string , entityIds?:Array ):Promise>{\r\n return new Promise>((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/workareafolder/${workareaFolderId}/entityIds`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as Array);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public putUpdateWorkarea( workareaFolderId?:string , workareaFolderModel?:IWorkareaFolderModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .put(`${this.baseUrl}/api/v1.0.0/workareafolder/${workareaFolderId}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IWorkareaFolderModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public deleteDeleteWorkarea( workareaFolderId?:string ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .delete(`${this.baseUrl}/api/v1.0.0/workareafolder/${workareaFolderId}`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as any);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n \r\n public postCreateWorkarea( creationModel?:IWorkareaCreationModel ):Promise{\r\n return new Promise((resolve, reject) => {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .post(`${this.baseUrl}/api/v1.0.0/workareafolder:createnew`)\r\n .send(creationModel)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(res.body as IWorkareaFolderModel);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n","import { observable, computed, autorun, action } from 'mobx';\r\nimport { IEntityBundleModel, IFieldSummaryModel, ICVLValueModel, IQueryModel, IDataCriterionModel, IEntitySummaryModel, ISystemCriterionModel, IEntityListModel, IFieldValueModel } from '../InRiverApiClient/models';\r\nimport { IContact } from '../model/Contact';\r\nimport { IDetailField } from '../model/DetailField';\r\nimport { ICVLValueModelExtended } from '../model/CVLValueModelExtended';\r\nimport { IDocumentationObject } from '../model/DocumentationObject';\r\nimport { ICompatibleTurbineObject } from '../model/CompatibleTurbineObject';\r\nimport { entityHttpSvc, modelHttpSvc, queryHttpSvc } from \"../services/InRiverApiClient\"\r\nimport { IServiceInfoObject } from '../model/ServiceInfoObject';\r\nimport { IServiceTopObject } from '../model/ServiceTopObject';\r\nimport { recordEvent } from './TelemetryCollector';\r\n\r\nexport class DetailsStore {\r\n @observable public entityId: number = -1;\r\n @observable public language: string = \"en\";\r\n @observable public entityBundle: IEntityBundleModel | null;\r\n @observable public cvlValues: ICVLValueModelExtended[] = [];\r\n @observable public modelVariants = new Map();\r\n @observable public error: boolean = false;\r\n @observable public isLoaded: boolean = false;\r\n @observable public contactMail: string = \"\";\r\n public fallbackLanguage: string = \"en\";\r\n public fallbackPrefix: string = \"*(From English)* \";\r\n\r\n @observable public selectedDocumentationBrandKey: string = \"\";\r\n @observable public selectedDocumentationModelKey: string = \"\";\r\n @observable public selectedDocumentationModelVariantKey: string = \"\";\r\n \r\n\r\n\r\n constructor() {\r\n // Get all needed CVL values from modle and add to cvlValues.\r\n modelHttpSvc.getGetAllCvlValues(\"SalesBusinessUnits\").then(model => this.addToCvlValues(model, \"SalesBusinessUnits\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Segment\").then(model => this.addToCvlValues(model, \"Segment\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Category\").then(model => this.addToCvlValues(model, \"Category\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Scope\").then(model => this.addToCvlValues(model, \"Scope\"));\r\n modelHttpSvc.getGetAllCvlValues(\"BusinessArea\").then(model => this.addToCvlValues(model, \"BusinessArea\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Country\").then(model => this.addToCvlValues(model, \"Country\"));\r\n modelHttpSvc.getGetAllCvlValues(\"CommercialCategory\").then(model => this.addToCvlValues(model, \"CommercialCategory\"));\r\n modelHttpSvc.getGetAllCvlValues(\"CommercialSubCategory\").then(model => this.addToCvlValues(model, \"CommercialSubCategory\"));\r\n modelHttpSvc.getGetAllCvlValues(\"ProjectType\").then(model => this.addToCvlValues(model, \"ProjectType\"));\r\n modelHttpSvc.getGetAllCvlValues(\"DevelopmentStage\").then(model => this.addToCvlValues(model, \"DevelopmentStage\"));\r\n modelHttpSvc.getGetAllCvlValues(\"DocumentationSubtype\").then(model => this.addToCvlValues(model, \"DocumentationSubtype\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Brand\").then(model => this.addToCvlValues(model, \"Brand\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Model\").then(model => this.addToCvlValues(model, \"Model\"));\r\n modelHttpSvc.getGetAllCvlValues(\"ModelVariant\").then(model => this.addToCvlValues(model, \"ModelVariant\"));\r\n modelHttpSvc.getGetAllCvlValues(\"Industry\").then(model => this.addToCvlValues(model, \"Industry\"));\r\n\r\n this.getContactMail();\r\n\r\n }\r\n\r\n @action public setEntityId(id: number) {\r\n\r\n this.setLoadedStatus(false);\r\n this.entityId = id;\r\n this.modelVariants = new Map();\r\n this.entityBundle = null;\r\n if (id === -1) {\r\n return;\r\n }\r\n \r\n entityHttpSvc.getGetEntityBundle(id, undefined, \"outbound\", undefined)\r\n .then(\r\n bundle => this.setEntityBundle(bundle),\r\n error => this.setError(true)\r\n ).then(() => this.setLoadedStatus(true));\r\n }\r\n\r\n @computed public get serviceInfoData(): IServiceInfoObject {\r\n\r\n return {\r\n externalDescription: this.getStringField(\"ServicePublicDescription\", this.entityBundle),\r\n name: this.getStringField(\"ServiceCommercialName\", this.entityBundle),\r\n sapMaterialID: this.getStringField(\"ServiceSAPID\", this.entityBundle),\r\n developmentStage: this.getCvlValuesField(\"ServiceDevelopmentStage\", this.entityBundle)[0] ? this.getCvlValuesField(\"ServiceDevelopmentStage\", this.entityBundle)[0] : \"\",\r\n imageUrls: this.getImagesFromResources(),\r\n keyDetails: this.generateKeyDetailList(),\r\n scope: this.getField(\"ServiceScope\", this.entityBundle) ? (this.getField(\"ServiceScope\", this.entityBundle) as IFieldSummaryModel).value : \"\"\r\n } as IServiceInfoObject;\r\n }\r\n\r\n @computed public get serviceTopData(): IServiceTopObject {\r\n\r\n return {\r\n\r\n sapMaterialID: this.getStringField(\"ServiceSAPID\", this.entityBundle)\r\n\r\n } as IServiceTopObject;\r\n }\r\n\r\n @computed public get relatedServices(): number[] {\r\n\r\n const list: number[] = [];\r\n\r\n if (!this.entityBundle) {\r\n return [];\r\n }\r\n if (!this.entityBundle.outbound) {\r\n return [];\r\n }\r\n const links = this.entityBundle.outbound.filter(f => f.linkTypeId === \"ServiceService\");\r\n if (!links) {\r\n return [];\r\n }\r\n\r\n links.filter(link => link && link.summary && link.summary.id && link.fields).map((entity) => {\r\n\r\n const isApprovedForExport = this.getStringField(\"ServiceApprovedForInternal\", entity);\r\n\r\n if (isApprovedForExport === \"True\") {\r\n list.push((entity.summary as IEntitySummaryModel).id as number);\r\n }\r\n });\r\n\r\n return list;\r\n }\r\n\r\n @computed public get compatibleTurbinesList(): ICompatibleTurbineObject[] {\r\n\r\n if (this.entityBundle === null) {\r\n return [];\r\n }\r\n const resultList: ICompatibleTurbineObject[] = [];\r\n const modelVariantField = this.getField(\"ServiceModelVariants\", this.entityBundle);\r\n if (!modelVariantField) {\r\n return [];\r\n }\r\n const modelField = this.getField(\"ServiceModels\", this.entityBundle);\r\n if (!modelField || !modelField.value) {\r\n return [];\r\n }\r\n const modelKeys: string[] = modelField.value.toString().split(\",\");\r\n\r\n if (!modelVariantField.value) {\r\n\r\n // If there is no value in this field, it must be because only 'All-something' is selected in model\r\n modelKeys.forEach((key) => {\r\n\r\n if (key.includes(\"All\")) {\r\n\r\n const brandFromKey = key.substring(3);\r\n resultList.push({\r\n brand: brandFromKey,\r\n model: \"All\",\r\n mark: \"\",\r\n mw: \"\",\r\n } as ICompatibleTurbineObject);\r\n\r\n }\r\n else {\r\n // There is a data error - do nothing.\r\n }\r\n })\r\n }\r\n else {\r\n\r\n // There are values in model variant field\r\n\r\n // Still check if there are any 'All' values in models, if there are add them to the list\r\n modelKeys.forEach((key) => {\r\n\r\n if (key.includes(\"All\")) {\r\n\r\n const brandFromKey = key.substring(3);\r\n resultList.push({\r\n brand: brandFromKey,\r\n model: \"All\",\r\n mark: \"\",\r\n mw: \"\",\r\n } as ICompatibleTurbineObject);\r\n }\r\n });\r\n\r\n // Now look at the model variant data\r\n const modelVariantKeys: string[] = modelVariantField.value.toString().split(\",\");\r\n\r\n modelVariantKeys.forEach((key) => {\r\n\r\n if (key.includes(\"All\")) {\r\n\r\n // One of the model values is all-something, handle this\r\n const subkey = key.substring(3); // Remove \"All\" from string\r\n this.cvlValues.filter(cvl => cvl.cvlId === \"Brand\").forEach((cvl) => {\r\n\r\n // Find a brand that matches the one in the string\r\n const cvlKey = cvl.model.key;\r\n if (cvlKey) {\r\n if (subkey.includes(cvlKey)) {\r\n\r\n // If brand matches string, set that as brand, and model must be the rest of the string\r\n const modelFromKey: string = subkey.substring(cvlKey.length);\r\n resultList.push({\r\n brand: cvlKey,\r\n model: modelFromKey,\r\n mark: \"All\",\r\n mw: \"\",\r\n } as ICompatibleTurbineObject);\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n\r\n // Find the corresponding ModelVariant entity from Map\r\n const entity = this.modelVariants.get(key);\r\n\r\n if (entity) {\r\n\r\n // Create compatible turbine object from the entity values\r\n const brandValue = this.getCvlValuesField(\"ModelVariantBrand\", entity);\r\n const modelValue = this.getStringField(\"ModelVariantModel\", entity);\r\n const mkValue = this.getStringField(\"ModelVariantMKVersion\", entity);\r\n const mwValue = this.getStringField(\"ModelVariantNominalPower\", entity);\r\n\r\n resultList.push({\r\n brand: brandValue[0],\r\n model: modelValue,\r\n mark: mkValue,\r\n mw: mwValue,\r\n } as ICompatibleTurbineObject);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return resultList;\r\n }\r\n\r\n @action public setEntityBundle(bundle: IEntityBundleModel) {\r\n\r\n // Set entity bundle\r\n this.entityBundle = bundle;\r\n\r\n recordEvent(\"Service\", this.getStringField(\"ServiceSAPID\", this.entityBundle));\r\n // Also get model variant entities needed to show the turbine compatibability\r\n const modelVariantField = this.getField(\"ServiceModelVariants\", this.entityBundle);\r\n if (!modelVariantField || !modelVariantField.value) {\r\n return;\r\n }\r\n const modelVariantKeys: string[] = modelVariantField.value.toString().split(\",\");\r\n\r\n modelVariantKeys.forEach((key) => {\r\n\r\n if (key.includes(\"All\")) {\r\n\r\n // Do nothing\r\n\r\n }\r\n else {\r\n\r\n // Find the corresponding ModelVariant entity\r\n const dataCriteria = {} as IDataCriterionModel;\r\n dataCriteria.fieldTypeId = \"ModelVariantModelVariantCVLKey\";\r\n dataCriteria.operator = \"Equal\";\r\n dataCriteria.value = key;\r\n const query = {} as IQueryModel;\r\n query.dataCriteria = [dataCriteria];\r\n\r\n queryHttpSvc.postQuery(query).then((result) => {\r\n if (result && result.count && result.count > 0 && result.entityIds) {\r\n\r\n const foundMVEntityId = result.entityIds[0];\r\n\r\n // Get the ModelVariant entity\r\n entityHttpSvc.getGetEntityBundle(foundMVEntityId).then((entity) => {\r\n\r\n this.addModelVariant(entity, key);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n @action public addModelVariant(modelVariant: IEntityBundleModel, key: string) {\r\n this.modelVariants.set(key, modelVariant);\r\n }\r\n\r\n @action public setLanguage(lang: string) {\r\n this.language = lang;\r\n }\r\n\r\n @computed public get serviceName(): string | undefined {\r\n return this.getStringField(\"ServiceCommercialName\", this.entityBundle);\r\n }\r\n\r\n @computed public get benefits(): string {\r\n return this.getStringField(\"ServiceBenefits\", this.entityBundle);\r\n }\r\n\r\n @computed public get internalDescription(): string | undefined {\r\n return this.getStringField(\"ServiceInternalDescription\", this.entityBundle);\r\n }\r\n\r\n @computed public get externalDescription(): string | undefined {\r\n return this.getStringField(\"ServicePublicDescription\", this.entityBundle);\r\n }\r\n\r\n @computed public get contacts(): IContact[] {\r\n\r\n const globalContact = this.getStringField(\"ServiceGlobalContact\", this.entityBundle)\r\n const nceContact = this.getStringField(\"ServiceNCEContact\", this.entityBundle)\r\n const medContact = this.getStringField(\"ServiceMEDContact\", this.entityBundle)\r\n const latamContact = this.getStringField(\"ServiceLATAMContact\", this.entityBundle)\r\n const apacContact = this.getStringField(\"ServiceAPACContact\", this.entityBundle)\r\n const ameContact = this.getStringField(\"ServiceAMEContact\", this.entityBundle)\r\n const techContact = this.getStringField(\"ServiceTechnicalResponsible\", this.entityBundle)\r\n\r\n return [{ area: \"Global contact\", person: globalContact } as IContact, { area: \"NCE contact\", person: nceContact } as IContact, { area: \"MED contact\", person: medContact } as IContact,\r\n { area: \"LATAM contact\", person: latamContact } as IContact, { area: \"APAC contact\", person: apacContact } as IContact, { area: \"AME contact\", person: ameContact } as IContact,\r\n { area: \"Technical responsible\", person: techContact } as IContact];\r\n }\r\n\r\n @computed public get details(): IDetailField[] {\r\n\r\n const commercialName = this.getStringField(\"ServiceCommercialName\", this.entityBundle);\r\n const scope = this.getCvlValuesField(\"ServiceScope\", this.entityBundle);\r\n const sapMaterialID = this.getStringField(\"ServiceSAPID\", this.entityBundle)\r\n const industry = this.getCvlValuesField(\"ServiceIndustry\", this.entityBundle);\r\n const businessArea = this.getCvlValuesField(\"ServiceBusinessArea\", this.entityBundle);\r\n const segment = this.getCvlValuesField(\"ServiceSegment\", this.entityBundle);\r\n const category = this.getCvlValuesField(\"ServiceCategory\", this.entityBundle);\r\n const commercialCategory = this.getCvlValuesField(\"ServiceCommercialCategory\", this.entityBundle);\r\n const commercialSubCategory = this.getCvlValuesField(\"ServiceCommercialSubCategory\", this.entityBundle);\r\n const developmentStage = this.getCvlValuesField(\"ServiceDevelopmentStage\", this.entityBundle);\r\n const approvedForExternalPublication = this.getStringField(\"ServiceApprovedForExternal\", this.entityBundle);\r\n\r\n return [\r\n { name: \"Commercial name\", value: commercialName } as IDetailField,\r\n { name: \"Scope\", value: scope[0] } as IDetailField,\r\n { name: \"SAP material ID\", value: sapMaterialID } as IDetailField,\r\n { name: \"Industry\", value: industry[0] } as IDetailField,\r\n { name: \"Business area\", value: businessArea[0] } as IDetailField,\r\n { name: \"Segment\", value: segment[0] } as IDetailField,\r\n { name: \"SAP Classification\", value: category[0] } as IDetailField,\r\n { name: \"Commercial category\", value: commercialCategory[0] } as IDetailField,\r\n { name: \"Commercial subcategory\", value: commercialSubCategory[0] } as IDetailField,\r\n { name: \"Development stage\", value: developmentStage[0] } as IDetailField,\r\n { name: \"Approved for ShopVestas\", value: approvedForExternalPublication } as IDetailField];\r\n }\r\n\r\n @computed public get countries(): string[] {\r\n const countries = this.getCvlValuesField(\"ServiceCountries\", this.entityBundle);\r\n if (!countries) {\r\n return [];\r\n }\r\n\r\n return countries;\r\n }\r\n\r\n @computed public get sbus(): string[] {\r\n const sbus = this.getCvlValuesField(\"ServiceSalesBusinessUnit\", this.entityBundle);\r\n if (!sbus) {\r\n return [];\r\n }\r\n return sbus;\r\n }\r\n\r\n @computed public get technicalDocumentation(): IDocumentationObject[] {\r\n\r\n return this.getDocumentation(\"ServiceTechnicalDocumentation\");\r\n }\r\n\r\n @computed public get commercialDocumentation(): IDocumentationObject[] {\r\n return this.getDocumentation(\"ServiceCommercialDocumentation\");\r\n }\r\n\r\n @computed public get filteredCommercialDocumentation(): IDocumentationObject[] {\r\n return this.filterOnSelectedKeys(this.commercialDocumentation);\r\n }\r\n\r\n\r\n @computed public get filteredTechnicalDocumentation(): IDocumentationObject[] {\r\n return this.filterOnSelectedKeys(this.technicalDocumentation);\r\n }\r\n\r\n @action public setError(error: boolean) {\r\n this.error = error;\r\n }\r\n\r\n @action public setLoadedStatus(status: boolean) {\r\n\r\n\r\n this.isLoaded = status;\r\n }\r\n\r\n @computed public get allDocumentationBrands(): ICVLValueModel[] {\r\n\r\n const allBrands: ICVLValueModel[] = [];\r\n this.commercialDocumentation.concat(this.technicalDocumentation).map(doc => doc.brands.map(newBrand => {\r\n\r\n if (allBrands.filter(existingBrand => existingBrand.key === newBrand.key).length < 1) {\r\n allBrands.push(newBrand);\r\n }\r\n }));\r\n\r\n return allBrands;\r\n }\r\n\r\n @computed public get filteredDocumentationModels(): ICVLValueModel[] {\r\n\r\n const allModels: ICVLValueModel[] = [];\r\n this.commercialDocumentation.concat(this.technicalDocumentation).map(doc => doc.models.map(newModel => {\r\n\r\n if (allModels.filter(existingModel => existingModel.key === newModel.key).length < 1 && (newModel.key && !newModel.key.includes(\"All\"))) {\r\n\r\n allModels.push(newModel);\r\n }\r\n }));\r\n\r\n return allModels.filter(model => model.parentKey === this.selectedDocumentationBrandKey);\r\n }\r\n\r\n @computed public get filteredDocumentationModelVariants(): ICVLValueModel[] {\r\n\r\n const allModelVariants: ICVLValueModel[] = [];\r\n this.commercialDocumentation.concat(this.technicalDocumentation).map(doc => doc.modelVariants.map(newModelVariant => {\r\n\r\n if (allModelVariants.filter(existingModelVariant => existingModelVariant.key === newModelVariant.key).length < 1 && (newModelVariant.key && !newModelVariant.key.includes(\"All\"))) {\r\n allModelVariants.push(newModelVariant);\r\n }\r\n }));\r\n\r\n return allModelVariants.filter(model => model.parentKey === this.selectedDocumentationModelKey);\r\n }\r\n\r\n @action public setSelectedDocumentationBrandKey(key: string) {\r\n this.selectedDocumentationBrandKey = key;\r\n this.selectedDocumentationModelKey = \"Default\";\r\n this.selectedDocumentationModelVariantKey = \"Default\";\r\n }\r\n\r\n @action public setSelectedDocumentationModelKey(key: string) {\r\n this.selectedDocumentationModelKey = key;\r\n this.selectedDocumentationModelVariantKey = \"Default\";\r\n }\r\n\r\n @action public setSelectedDocumentationModelVariantKey(key: string) {\r\n this.selectedDocumentationModelVariantKey = key;\r\n }\r\n\r\n private getCvlValuesField(fieldTypeId: string, entityBundle: IEntityBundleModel | null): string[] {\r\n const field = this.getField(fieldTypeId, entityBundle);\r\n if (!field) {\r\n return [];\r\n }\r\n const fieldValue = field.value;\r\n if (!fieldValue) {\r\n return [];\r\n }\r\n const keys = fieldValue.toString();\r\n if (!keys) {\r\n return [];\r\n }\r\n\r\n const keyArray = keys.split(\",\");\r\n const cvlId = field.cvlId;\r\n if (!cvlId) {\r\n return [];\r\n }\r\n\r\n const cvlValues = keyArray.map(key => {\r\n const cvlValue = this.cvlValues.find(cvl => cvl.cvlId === cvlId && cvl.model.key === key);\r\n if (cvlValue) {\r\n\r\n switch (cvlValue.localeString) {\r\n case true: return cvlValue.model.value[this.language].toString();\r\n case false: return cvlValue.model.value.toString();\r\n }\r\n\r\n }\r\n return \"\";\r\n })\r\n\r\n return cvlValues;\r\n }\r\n\r\n private GetCVLValueModelsField(fieldTypeId: string, entityBundle: IEntityBundleModel | null): ICVLValueModel[] {\r\n const field = this.getField(fieldTypeId, entityBundle);\r\n if (!field) {\r\n return [];\r\n }\r\n const fieldValue = field.value;\r\n if (!fieldValue) {\r\n return [];\r\n }\r\n const keys = fieldValue.toString();\r\n if (!keys) {\r\n return [];\r\n }\r\n\r\n const keyArray = keys.split(\",\");\r\n\r\n const cvlId = field.cvlId;\r\n if (!cvlId) {\r\n return [];\r\n }\r\n\r\n const cvlValues = keyArray.map(key => {\r\n const cvlValue = this.cvlValues.find(cvl => cvl.cvlId === cvlId && cvl.model.key === key);\r\n if (cvlValue) {\r\n\r\n return {key: cvlValue.model.key, value: cvlValue.model.value, parentKey: cvlValue.model.parentKey} as ICVLValueModel;\r\n\r\n }\r\n return \"\";\r\n })\r\n\r\n return cvlValues;\r\n }\r\n\r\n private addToCvlValues(model: ICVLValueModel[], CVLId: string, localeStringParam = false) {\r\n\r\n const arrayToAdd: ICVLValueModelExtended[] = model.map(cvlValue => {\r\n\r\n return { model: cvlValue, cvlId: CVLId, localeString: localeStringParam } as ICVLValueModelExtended;\r\n });\r\n\r\n this.cvlValues = this.cvlValues.concat(arrayToAdd);\r\n }\r\n\r\n private getDataEntity(queryResult: IEntityListModel) {\r\n\r\n if (queryResult.entityIds !== undefined && queryResult.entityIds.length !== 0) {\r\n\r\n const entityId: number = queryResult.entityIds[0]\r\n entityHttpSvc.getGetFieldValues(entityId, \"DataEntityISCContactMail\").then(result => this.setContactEmail(result))\r\n return;\r\n }\r\n\r\n this.setError(true);\r\n }\r\n\r\n private setContactEmail(fieldValues: IFieldValueModel[]) {\r\n\r\n const value = fieldValues[0].value;\r\n this.contactMail = value;\r\n }\r\n\r\n private getContactMail() {\r\n\r\n const systemCriteriaModel: ISystemCriterionModel = {\r\n\r\n type: \"EntityTypeId\",\r\n operator: \"Equal\",\r\n value: \"DataEntity\"\r\n }\r\n\r\n const query: IQueryModel = {\r\n\r\n systemCriteria: [systemCriteriaModel]\r\n }\r\n\r\n queryHttpSvc.postQuery(query).then((result) => this.getDataEntity(result));\r\n }\r\n\r\n private filterOnSelectedKeys(data: IDocumentationObject[]): IDocumentationObject[] {\r\n\r\n return data.filter(doc => {\r\n\r\n if (doc.brands.length < 1) {\r\n return true;\r\n }\r\n\r\n if (this.selectedDocumentationModelVariantKey !== \"Default\") {\r\n\r\n if (doc.modelVariants.some(mv => (mv.key && mv.key === this.selectedDocumentationModelVariantKey) || (mv.key && mv.key === \"All\" + this.selectedDocumentationModelKey))\r\n || doc.models.some(model => model.key === \"All\" + this.selectedDocumentationBrandKey)) {\r\n return true;\r\n }\r\n return false;\r\n\r\n }\r\n else if (this.selectedDocumentationModelKey !== \"Default\") {\r\n\r\n if (doc.models.some(model => model.key === this.selectedDocumentationModelKey || (model.key && model.key === \"All\" + this.selectedDocumentationBrandKey))) {\r\n return true;\r\n }\r\n return false;\r\n\r\n }\r\n else if (this.selectedDocumentationBrandKey !== \"Default\") {\r\n\r\n if (doc.brands.some(brand => brand.key === this.selectedDocumentationBrandKey)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n else {\r\n return false;\r\n }\r\n })\r\n }\r\n\r\n private getStringField(fieldTypeId: string, entityBundle: IEntityBundleModel | null): string {\r\n const field = this.getField(fieldTypeId, entityBundle);\r\n if (!field) {\r\n return \"\";\r\n }\r\n\r\n switch (field.fieldDataType) {\r\n case \"LocaleString\": return this.getStringValue(field);\r\n case \"String\": return field.value as string;\r\n case \"Boolean\": {\r\n if (typeof (field.value) === 'undefined' || field.value === null) {\r\n return \"\";\r\n }\r\n const bool = field.value as boolean;\r\n return bool ? \"True\" : \"False\";\r\n };\r\n }\r\n return \"\";\r\n }\r\n\r\n private getField(fieldTypeId: string, entityBundle: IEntityBundleModel | null): IFieldSummaryModel | undefined {\r\n if (!entityBundle) {\r\n return undefined;\r\n }\r\n if (!entityBundle.fields) {\r\n return undefined;\r\n }\r\n const field = entityBundle.fields.filter(f => f.fieldTypeId === fieldTypeId);\r\n if (field && field.length === 1) {\r\n return field[0];\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private getDocumentation(linkTypeId: string): IDocumentationObject[] {\r\n\r\n const list: IDocumentationObject[] = [];\r\n\r\n if (!this.entityBundle) {\r\n return [];\r\n }\r\n if (!this.entityBundle.outbound) {\r\n return [];\r\n }\r\n const links = this.entityBundle.outbound.filter(f => f.linkTypeId === linkTypeId);\r\n if (!links) {\r\n return [];\r\n }\r\n\r\n links.filter(entity => entity.fields).map((entity) => {\r\n if (entity.fields) {\r\n const nameValue = this.getStringField(\"DocumentationName\", entity);\r\n const linkValue = this.getStringField(\"DocumentationLink\", entity);\r\n const subTypeValue = this.getCvlValuesField(\"DocumentationSubtype\", entity);\r\n const languages = this.getField(\"DocumentationLanguages\", entity);\r\n const brandsValue = this.GetCVLValueModelsField(\"DocumentationBrands\", entity);\r\n const modelsValue = this.GetCVLValueModelsField(\"DocumentationModels\", entity);\r\n const modelVariantsValue = this.GetCVLValueModelsField(\"DocumentationModelVariant\", entity);\r\n\r\n let languageString: string = \"\";\r\n if (languages) {\r\n languageString = languages && languages.value ? languages.value.toString().split(\",\").join(\" \") : \"\";\r\n }\r\n\r\n list.push({ subType: subTypeValue[0], name: nameValue, link: linkValue, language: languageString.toUpperCase(), brands: brandsValue, models: modelsValue, modelVariants: modelVariantsValue } as IDocumentationObject);\r\n }\r\n });\r\n\r\n return list;\r\n }\r\n\r\n private getImagesFromResources(): string[] {\r\n\r\n if (!this.entityBundle) {\r\n return [];\r\n }\r\n if (!this.entityBundle.outbound) {\r\n return [];\r\n }\r\n const links = this.entityBundle.outbound.filter(f => f.linkTypeId === \"ServiceResource\");\r\n if (!links) {\r\n return [];\r\n }\r\n\r\n return links\r\n .filter(resource => resource && resource.summary && resource.summary.resourceUrl)\r\n .map(resource => (resource.summary as IEntitySummaryModel).resourceUrl as string);\r\n\r\n }\r\n\r\n private getStringValue(field: IFieldSummaryModel): string {\r\n\r\n const currentLanguageString = field.value[this.language] ? field.value[this.language] : \"\";\r\n\r\n if (currentLanguageString === \"\") {\r\n\r\n const defaultLanguageString = field.value[this.fallbackLanguage] ? field.value[this.fallbackLanguage] : \"\";\r\n\r\n if (defaultLanguageString !== \"\") {\r\n\r\n return this.fallbackPrefix + defaultLanguageString;\r\n }\r\n }\r\n\r\n return currentLanguageString;\r\n }\r\n\r\n private generateKeyDetailList(): IDetailField[] {\r\n\r\n const scope = this.getCvlValuesField(\"ServiceScope\", this.entityBundle)[0] ? this.getCvlValuesField(\"ServiceScope\", this.entityBundle)[0] : \"\";\r\n const businessArea = this.getCvlValuesField(\"ServiceBusinessArea\", this.entityBundle);\r\n const commercialCategory = this.getCvlValuesField(\"ServiceCommercialCategory\", this.entityBundle);\r\n const commercialSubCategory = this.getCvlValuesField(\"ServiceCommercialSubCategory\", this.entityBundle);\r\n const approvedForExternalPublication = this.getStringField(\"ServiceApprovedForExternal\", this.entityBundle);\r\n const sapMaterialID = this.getStringField(\"ServiceSAPID\", this.entityBundle);\r\n const developmentStage = this.getCvlValuesField(\"ServiceDevelopmentStage\", this.entityBundle)[0] ? this.getCvlValuesField(\"ServiceDevelopmentStage\", this.entityBundle)[0] : \"\";\r\n\r\n return [{ name: \"Scope\", value: scope } as IDetailField,\r\n { name: \"SAP material ID\", value: sapMaterialID } as IDetailField,\r\n { name: \"Development stage\", value: developmentStage } as IDetailField,\r\n { name: \"Business area\", value: businessArea[0] } as IDetailField,\r\n { name: \"Commercial category\", value: commercialCategory[0] } as IDetailField,\r\n { name: \"Commercial subcategory\", value: commercialSubCategory[0] } as IDetailField,\r\n { name: \"Approved for ShopVestas\", value: approvedForExternalPublication.replace(\"True\", \"Yes\").replace(\"False\", \"No\") } as IDetailField];\r\n }\r\n}\r\n\r\n","import { observable, computed, autorun, action } from 'mobx';\r\nimport { EntityHttpSvc } from '../InRiverApiClient/EntityHttpSvc';\r\nimport { IEntityBundleModel, IFieldSummaryModel, IEntityTypeModel, ICVLModel, ICVLValueModel, ILanguageModel } from '../InRiverApiClient/models';\r\nimport { modelHttpSvc } from \"../services/InRiverApiClient\"\r\nimport { systemHttpSvc } from \"../services/InRiverApiClient\"\r\n\r\nconst cvlValuesToFetch = [\r\n \"Area\",\r\n \"BusinessArea\",\r\n \"Type\",\r\n \"Country\",\r\n \"Category\",\r\n \"Scope\",\r\n \"SalesBusinessUnits\",\r\n \"DevelopmentStage\",\r\n \"Brand\",\r\n \"Model\",\r\n \"ModelVariant\",\r\n \"CommercialCategory\",\r\n \"CommercialSubCategory\"];\r\n\r\nexport default class ModelStore {\r\n @observable public entityTypes: IEntityTypeModel[];\r\n @observable public cvls: ICVLModel[];\r\n @observable public cvlValues: Map = new Map();\r\n @observable public error: boolean = false;\r\n @observable public ready: boolean = false;\r\n @observable public pimLanguages: ILanguageModel[];\r\n\r\n public constructor() {\r\n // Do not fire too many requests at once...\r\n // Todo: Consider af api could be rate limited. Probably simpler to limit in proxy (simple semaphore)\r\n // then code could simplified to a single promise.all\r\n Promise.all([\r\n this.loadPIMLanguages(),\r\n this.loadEntityTypes(),\r\n this.loadCvls(),\r\n ...cvlValuesToFetch.map(cvlId => this.loadCvlValue(cvlId))])\r\n .then(x => this.setReady(true)); \r\n }\r\n\r\n @action public setEntityTypes(entityTypes: IEntityTypeModel[]) {\r\n this.entityTypes = entityTypes;\r\n }\r\n\r\n @action public setCvls(cvls: ICVLModel[]) {\r\n this.cvls = cvls;\r\n }\r\n\r\n @action public setPIMLanguages(pimLanguages: ILanguageModel[]) {\r\n this.pimLanguages = pimLanguages;\r\n }\r\n\r\n @action public setCvlValues(cvlId: string, cvlValues: ICVLValueModel[]) {\r\n this.cvlValues.set(cvlId, cvlValues);\r\n }\r\n\r\n @action public setError(error: boolean) {\r\n this.error = error;\r\n }\r\n\r\n @action public setReady(ready: boolean) {\r\n this.ready = ready;\r\n }\r\n\r\n private loadEntityTypes() {\r\n return modelHttpSvc.getGetAllEntityTypes().then(\r\n result => this.setEntityTypes(result),\r\n error => this.setError(true));\r\n }\r\n\r\n private loadCvls() {\r\n return modelHttpSvc.getGetAllCvls().then(\r\n result => this.setCvls(result),\r\n error => this.setError(true)\r\n );\r\n }\r\n\r\n private loadCvlValue(cvlId: string) {\r\n return modelHttpSvc.getGetAllCvlValues(cvlId).then(\r\n result => this.setCvlValues(cvlId, result),\r\n error => this.setError(true))\r\n }\r\n\r\n private loadPIMLanguages() {\r\n return modelHttpSvc.getGetAllLanguages().then(\r\n result => this.setPIMLanguages(result),\r\n error => this.setError(true))\r\n }\r\n}","import { observable, computed, autorun, action } from 'mobx';\r\nimport { IEntityBundleModel, IFieldSummaryModel, IEntityTypeModel, ICVLModel, ICVLValueModel, IQueryModel, IEntityListModel, IDataCriterionModel, ISystemCriterionModel } from '../InRiverApiClient/models';\r\nimport { queryHttpSvc } from \"../services/InRiverApiClient\"\r\nimport ModelStore from './ModelStore';\r\nimport { recordEvent } from './TelemetryCollector';\r\n\r\nexport default class SearchStore {\r\n @observable public modelStore: ModelStore;\r\n @observable public query: IQueryModel | undefined;\r\n @observable public isSearching: boolean = false;\r\n @observable public primaryResultIds: number[] = [];\r\n @observable public excludedResultIds: number[] = [];\r\n @observable public searchString: string = \"\";\r\n @observable public error: boolean = false;\r\n private searchPromise: Promise;\r\n\r\n public constructor(modelStore: ModelStore) {\r\n this.searchPromise = Promise.resolve({ count: 0, entityIds: [] } as IEntityListModel);\r\n this.modelStore = modelStore;\r\n\r\n }\r\n\r\n @computed public get resultEntityIds(): number[] {\r\n\r\n // In most cases the services to display will simply be the primaryResultIds, that are found by executing the selected queries.\r\n // However when using the 'model variant' filter it is necessary to implement an 'or' operation - because services can match on both having the correct model variant selected \r\n // in the modelVariant field OR the 'All+model' value in the model field. Since 'or' is not directly supported we must implement it like this:\r\n // result = A OR B <=> result = inverse(inversa(A) AND inverse(B)) <=> result = allServices - (inversa(A) AND inverse(B))\r\n // In this case primaryResultIds becomes all services, and excludedResultIds is 'inversa(A) AND inverse(B)'.\r\n if (!this.primaryResultIds) {\r\n return [];\r\n }\r\n if (!this.excludedResultIds) {\r\n return [];\r\n }\r\n\r\n if (this.excludedResultIds.length < 1) {\r\n\r\n return this.primaryResultIds;\r\n }\r\n\r\n return this.primaryResultIds.filter(result => !this.excludedResultIds.includes(result))\r\n }\r\n\r\n @action public setPrimaryResultIds(ids: number[] | undefined) {\r\n\r\n this.primaryResultIds = ids || [];\r\n\r\n };\r\n\r\n @action public setExcludedResultsIds(ids: number[] | undefined) {\r\n\r\n this.excludedResultIds = ids || [];\r\n\r\n };\r\n\r\n @action public setQuery(query: IQueryModel) {\r\n \r\n if (query && query.dataCriteria) {\r\n\r\n const primaryDataCriteria = query.dataCriteria.filter(criteria => criteria.fieldTypeId !== 'ServiceModels'\r\n && criteria.fieldTypeId !== 'ServiceModelVariants');\r\n\r\n const modelsDataCriteria = query.dataCriteria.filter(criteria => criteria.fieldTypeId === 'ServiceModels')\r\n const modelVariantDataCriteria = query.dataCriteria.filter(criteria => criteria.fieldTypeId === 'ServiceModelVariants')\r\n\r\n const primaryQuery = {\r\n\r\n systemCriteria: query.systemCriteria,\r\n dataCriteria: primaryDataCriteria\r\n\r\n } as IQueryModel\r\n\r\n if (modelVariantDataCriteria && modelVariantDataCriteria[0]) {\r\n\r\n this.calculateExcludedResultsByModelVariantCriteria(modelVariantDataCriteria[0].value);\r\n }\r\n\r\n if (modelsDataCriteria && modelsDataCriteria[0]) {\r\n\r\n modelsDataCriteria[0].value = this.addAllValueToCriteriaValue(modelsDataCriteria[0].value);\r\n primaryQuery.dataCriteria = primaryDataCriteria.concat(modelsDataCriteria);\r\n }\r\n\r\n this.query = primaryQuery;\r\n\r\n this.isSearching = true;\r\n \r\n this.searchPromise = this.searchPromise.then(\r\n p => queryHttpSvc.postQuery(primaryQuery, \"ServiceCommercialName\").then(\r\n result => this.setPrimaryResultIds(result.entityIds),\r\n error => this.setError(true)\r\n ));\r\n } \r\n }\r\n\r\n @action public setSearchString(str: string) {\r\n this.searchString = str;\r\n if (str) {\r\n recordEvent(\"Search\",str)\r\n }\r\n \r\n }\r\n\r\n @action public setError(error: boolean) {\r\n this.error = error;\r\n }\r\n\r\n private addAllValueToCriteriaValue(selectedKey: string) {\r\n\r\n const cvlValuesFound = this.modelStore.cvlValues.get(\"Model\");\r\n const cvlFound = cvlValuesFound ? cvlValuesFound.filter(cvl => cvl.key === selectedKey.toString()) : undefined;\r\n\r\n if (!cvlFound || cvlFound.length !== 1) {\r\n return selectedKey;\r\n }\r\n\r\n const parentKey = cvlFound[0].parentKey;\r\n\r\n return [selectedKey + \";All\" + parentKey];\r\n }\r\n\r\n private calculateExcludedResultsByModelVariantCriteria(selectedModelVariantKey: string){\r\n\r\n const parentParentKey = this.getParentParentKey(selectedModelVariantKey);\r\n\r\n if (!parentParentKey) {\r\n return;\r\n }\r\n\r\n const inverseModelCriteria = {\r\n fieldTypeId: \"ServiceModels\",\r\n value: [\"All\"+parentParentKey],\r\n operator: \"NotContainsAny\",\r\n } as IDataCriterionModel;\r\n\r\n const inverseModelVariantCriteria = {\r\n fieldTypeId: \"ServiceModelVariants\",\r\n value: selectedModelVariantKey,\r\n operator: \"NotContainsAny\",\r\n } as IDataCriterionModel;\r\n\r\n const entityTypeCriteria = {\r\n type: \"EntityTypeId\",\r\n value: \"Service\",\r\n operator: \"Equal\",\r\n } as ISystemCriterionModel;\r\n\r\n const inverseQuery = {\r\n\r\n dataCriteria: [inverseModelCriteria, inverseModelVariantCriteria],\r\n systemCriteria: [entityTypeCriteria]\r\n\r\n } as IQueryModel\r\n\r\n this.isSearching = true;\r\n\r\n queryHttpSvc.postQuery(inverseQuery).then(\r\n inverseResult => this.setExcludedResultsIds(inverseResult.entityIds),\r\n error => this.setError(true)\r\n );\r\n }\r\n\r\n private getParentParentKey(selectedKey: string) : string | undefined {\r\n\r\n const modelVariantCvlValuesFound = this.modelStore.cvlValues.get(\"ModelVariant\");\r\n const modelVariantCVLFound = modelVariantCvlValuesFound ? modelVariantCvlValuesFound.filter(cvl => cvl.key === selectedKey.toString()) : undefined;\r\n\r\n if (!modelVariantCVLFound || modelVariantCVLFound.length !== 1) {\r\n return undefined;\r\n }\r\n const modelVariantParentKey = modelVariantCVLFound[0].parentKey;\r\n\r\n if (!modelVariantParentKey) {\r\n return undefined;\r\n }\r\n\r\n const parentsCvlValuesFound = this.modelStore.cvlValues.get(\"Model\");\r\n const parentCVLFound = parentsCvlValuesFound ? parentsCvlValuesFound.filter(cvl => cvl.key === modelVariantParentKey.toString()) : undefined;\r\n\r\n if (!parentCVLFound || parentCVLFound.length !== 1) {\r\n return undefined;\r\n }\r\n const parentParentKey = parentCVLFound[0].parentKey;\r\n\r\n if (!parentParentKey) {\r\n return undefined;\r\n }\r\n\r\n return parentParentKey;\r\n }\r\n}","import { observable, computed, autorun, action } from 'mobx';\r\nimport * as request from \"superagent\";\r\nimport { requestWithToken } from '../adalConfig';\r\n\r\nexport default class UserStore {\r\n @observable public fullName: string | undefined;\r\n\r\n constructor() {\r\n requestWithToken((tokenError, token) => {\r\n request\r\n .get(`${window.location.protocol}//${window.location.host}/UserApi/fullname`)\r\n .set('Authorization', `bearer ${token}`)\r\n .end((error, res) => {\r\n if (!error) {\r\n this.setFullName(res.text as string);\r\n }\r\n });\r\n });\r\n }\r\n \r\n\r\n @action public setFullName(name: string) {\r\n this.fullName = name;\r\n }\r\n\r\n\r\n}","import { observable, computed, autorun, action } from 'mobx';\r\nimport { IQueryModel, IDataCriterionModel } from '../InRiverApiClient/models';\r\nimport ModelStore from './ModelStore';\r\n\r\nexport default class CatalogStore {\r\n @observable public modelStore: ModelStore;\r\n @observable public language: string = \"en\";\r\n @observable public error: boolean = false;\r\n @observable public businessAreaQuery: IQueryModel = {};\r\n @observable public categoryQuery: IQueryModel = {};\r\n @observable public brandQuery: IQueryModel = {};\r\n @observable public turbineQuery: IQueryModel = {};\r\n @observable public modelQuery: IQueryModel = {};\r\n @observable public sbuQuery: IQueryModel = {};\r\n @observable public countryQuery: IQueryModel = {}; \r\n @observable public developmentStageQuery: IQueryModel = {};\r\n\r\n public constructor(modelStore: ModelStore) {\r\n this.modelStore = modelStore;\r\n }\r\n\r\n @action public setError(error: boolean) {\r\n this.error = error;\r\n }\r\n\r\n @action public setBusinessAreaQuery(query: IQueryModel) {\r\n this.businessAreaQuery = query;\r\n }\r\n\r\n @action public setCategoryQuery(query: IQueryModel) {\r\n this.categoryQuery = query;\r\n }\r\n\r\n @action public setBrandQuery(query: IQueryModel) {\r\n this.brandQuery = query;\r\n }\r\n\r\n @action public setTurbineQuery(query: IQueryModel) {\r\n this.turbineQuery = query;\r\n }\r\n\r\n @action public setModelQuery(query: IQueryModel) {\r\n this.modelQuery = query;\r\n }\r\n\r\n @action public setSbuQuery(query: IQueryModel) {\r\n this.sbuQuery = query;\r\n }\r\n\r\n @action public setCountryQuery(query: IQueryModel) {\r\n this.countryQuery = query;\r\n }\r\n\r\n @action public setDevelopmentStageQuery(query: IQueryModel) {\r\n this.developmentStageQuery = query;\r\n }\r\n\r\n @action public resetQueries() {\r\n this.businessAreaQuery = {};\r\n this.categoryQuery = {};\r\n this.brandQuery = {};\r\n this.turbineQuery = {};\r\n this.modelQuery = {};\r\n this.sbuQuery = {};\r\n this.countryQuery = {};\r\n this.developmentStageQuery = {};\r\n }\r\n\r\n @computed public get businessAreaQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.businessAreaQuery);\r\n }\r\n\r\n @computed public get categoryQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.categoryQuery);\r\n }\r\n\r\n @computed public get brandQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.brandQuery);\r\n }\r\n\r\n @computed public get turbineQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.turbineQuery);\r\n }\r\n\r\n @computed public get modelQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.modelQuery);\r\n }\r\n\r\n @computed public get sbuQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.sbuQuery);\r\n }\r\n\r\n @computed public get countryQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.countryQuery);\r\n }\r\n\r\n @computed public get developmentStageQueryValue() {\r\n return this.getCvlValueFromQueryModel(this.developmentStageQuery);\r\n }\r\n\r\n private getCvlValueFromQueryModel(query: IQueryModel) {\r\n if (query && query.dataCriteria) {\r\n return this.getCvlValueFromDataCriteria(query.dataCriteria.find(x => true));\r\n }\r\n return undefined;\r\n }\r\n\r\n private getCvlValueFromDataCriteria(dataCriteria?: IDataCriterionModel): string | undefined {\r\n if (!dataCriteria) {\r\n return undefined;\r\n }\r\n\r\n const fieldType = this.modelStore.entityTypes.flatMap(x => x.fieldTypes).find(x => x && x.fieldTypeId === dataCriteria.fieldTypeId);\r\n if (!fieldType) {\r\n return undefined;\r\n }\r\n\r\n const criteriaValue = fieldType.isMultiValue ?\r\n (dataCriteria.value as string[]).find(x => true)\r\n : dataCriteria.value as string;\r\n\r\n if (!criteriaValue) {\r\n return undefined;\r\n }\r\n\r\n const cvl = this.modelStore.cvls.find(x => x.id === fieldType.cvlId);\r\n if (!cvl) {\r\n return undefined;\r\n }\r\n\r\n\r\n\r\n const cvlValues = this.modelStore.cvlValues.get(fieldType.cvlId as string);\r\n if (!cvlValues) {\r\n return undefined;\r\n }\r\n\r\n const cvlValue = cvlValues.find(x => x.key === criteriaValue);\r\n if (!cvlValue) {\r\n return undefined;\r\n }\r\n\r\n return cvl.dataType === \"LocaleString\" ? cvlValue.value[this.language] : cvlValue.value;\r\n }\r\n\r\n}","import * as React from 'react'\r\nimport { DetailsStore } from '../stores/DetailsStore';\r\nimport { RouterStore, syncHistoryWithStore } from 'mobx-react-router';\r\nimport createBrowserHistory from 'history/createBrowserHistory';\r\nimport ModelStore from '../stores/ModelStore';\r\nimport SearchStore from '../stores/SearchStore';\r\nimport UserStore from '../stores/UserStore';\r\nimport CatalogStore from '../stores/CatalogStore';\r\n\r\nconst browserHistory = createBrowserHistory();\r\nconst routingStoreInternal = new RouterStore();\r\nconst historyInternal = syncHistoryWithStore(browserHistory, routingStoreInternal);\r\nconst detailsStoreInternal = new DetailsStore();\r\nconst modelStoreInternal = new ModelStore();\r\n\r\nexport const storesContext = React.createContext({\r\n detailsStore: detailsStoreInternal,\r\n routingStore: routingStoreInternal,\r\n modelStore: modelStoreInternal,\r\n searchStore: new SearchStore(modelStoreInternal),\r\n userStore: new UserStore(),\r\n catalogStore: new CatalogStore(modelStoreInternal)\r\n})\r\n\r\nexport const history = historyInternal;","import * as React from 'react'\r\nimport { storesContext } from '../contexts'\r\n\r\nexport const useStores = () => React.useContext(storesContext)","import * as React from \"react\";\r\nimport QueryContext, { IQueryContextValue } from \"./QueryContext\";\r\nimport { IQueryModel } from \"../../InRiverApiClient/models\";\r\nimport * as _ from 'underscore';\r\n\r\nexport interface IFilterSettings {\r\n query?: IQueryModel\r\n queryChanged?: (IQueryModel) => void\r\n}\r\n\r\nexport function WrapQueryContext(WrappedComponent: React.ComponentType) {\r\n const decorated = class extends React.Component {\r\n public render() {\r\n return {\r\n context => {\r\n const wrappedContext = _.clone(context);\r\n wrappedContext.query = this.props.query || context.query;\r\n wrappedContext.updateQuery = (q) => { context.updateQuery(q); this.queryChanged(q); }\r\n return \r\n }\r\n }\r\n \r\n }\r\n\r\n public componentDidMount() {\r\n const context = this.context as IQueryContextValue\r\n if (this.props.query && !_.isEqual(this.props.query, context.query)) {\r\n context.updateQuery(this.props.query);\r\n }\r\n }\r\n\r\n public componentDidUpdate(prevProps: IFilterSettings) {\r\n const context = this.context as IQueryContextValue\r\n if (this.props.query && !_.isEqual(prevProps.query, this.props.query) && !_.isEqual(this.props.query, context.query)) {\r\n context.updateQuery(this.props.query);\r\n }\r\n }\r\n\r\n private queryChanged(query: IQueryModel) {\r\n if (this.props.queryChanged) {\r\n this.props.queryChanged(query);\r\n }\r\n }\r\n }\r\n decorated.contextType = QueryContext;\r\n\r\n\r\n return decorated;\r\n}","import * as React from \"react\";\r\nimport { IQueryContextValue } from \"./QueryContext\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel, IDataCriterionModel } from \"../../InRiverApiClient/models\";\r\nimport { WrapQueryContext } from \"./QueryContextWrapper\";\r\n\r\nexport interface ICvlFilterProps {\r\n label?: string,\r\n fieldTypeId: string,\r\n allLabel: string\r\n\r\n}\r\n\r\nclass CvlFilter extends React.Component{\r\n public render() {\r\n const entityType = this.getEntityType(this.props.fieldTypeId);\r\n const fieldType = this.getFieldType(this.props.fieldTypeId);\r\n const cvl = this.getCvl(this.props.fieldTypeId);\r\n if (!fieldType || !entityType || !cvl) {\r\n return ;\r\n }\r\n\r\n const validCvlValues = this.getValidCvlValues(entityType, cvl);\r\n const valuesInLocale = this.getCvlValuesInLocale(cvl, validCvlValues);\r\n const availableOptions = [{ key: \"\\$All\", value: this.props.allLabel },\r\n ...valuesInLocale];\r\n const currentOption = availableOptions\r\n .find(v => v.key === this.getCurrentSettingFromQuery());\r\n\r\n return \r\n \r\n \r\n ;\r\n }\r\n\r\n public componentDidUpdate() {\r\n const currentSetting = this.getCurrentSettingFromQuery();\r\n if (currentSetting === \"\\$All\") {\r\n return;\r\n }\r\n const entityType = this.getEntityType(this.props.fieldTypeId);\r\n const cvl = this.getCvl(this.props.fieldTypeId);\r\n const validSetting = entityType\r\n && cvl\r\n && this.getValidCvlValues(entityType, cvl)\r\n .map(x => x.key)\r\n .includes(currentSetting);\r\n\r\n if (!validSetting) {\r\n this.props.updateQuery({})\r\n }\r\n }\r\n\r\n private getValidCvlValues(entityType: IEntityTypeModel, cvl: ICVLModel): ICVLValueModel[] {\r\n const cvlValues = this.props.cvlValues.get(cvl.id || \"\") || [];\r\n\r\n if (!cvl.parentId) {\r\n return cvlValues;\r\n }\r\n\r\n const parentCvl = this.props.cvls.find(x => x.id === cvl.parentId);\r\n if (!parentCvl) {\r\n return cvlValues;\r\n }\r\n\r\n const parentFieldTypes = entityType\r\n && entityType.fieldTypes\r\n && entityType.fieldTypes.filter(ft => ft.fieldDataType === \"CVL\" && ft.cvlId === cvl.parentId) || [];\r\n\r\n const parentCvlKeys = this.getValidCvlValues(entityType, parentCvl).map(cvlValue => cvlValue.key as string);\r\n const acceptedStructure = parentFieldTypes.map(pft => {\r\n const filters = this.props.combinedQuery.dataCriteria && this.props.combinedQuery.dataCriteria.filter(dc => dc.fieldTypeId === pft.fieldTypeId);\r\n if (filters) {\r\n return parentCvlKeys.filter(val => {\r\n return filters\r\n .map(dc => this.accepts(pft, dc, val))\r\n .reduce((acc, currentVal) => acc && currentVal, true)\r\n });\r\n }\r\n return parentCvlKeys;\r\n });\r\n\r\n const validParentKeys = parentCvlKeys.filter(pcvl =>\r\n acceptedStructure.map(acc => acc.includes(pcvl || \"\")).reduce((acc, x) => acc && x, true)\r\n );\r\n\r\n return cvlValues.filter(cvlval => validParentKeys.includes(cvlval.parentKey || \"\"));\r\n }\r\n\r\n private accepts(fieldType: IFieldTypeModel, criteria: IDataCriterionModel, cvlKey?: string) {\r\n if (!criteria) {\r\n return true;\r\n }\r\n if (!cvlKey) {\r\n return false;\r\n }\r\n\r\n if (fieldType.isMultiValue) {\r\n switch (criteria.operator) {\r\n case \"ContainsAll\": return true;\r\n case \"ContainsAny\":\r\n const strVal = criteria.value.toString();\r\n const splitVal = strVal.split(';');\r\n return splitVal.includes(cvlKey)\r\n\r\n case \"NotContainsAll\": return true;\r\n case \"NotContainsAny\": return !(criteria.value as string[]).includes(cvlKey);;\r\n case \"IsEmpty \": return false;\r\n case \"IsNotEmpty\": return true;\r\n }\r\n } else {\r\n switch (criteria.operator) {\r\n case \"Equal\": return cvlKey === criteria.value as string;\r\n case \"NotEqual\": return cvlKey !== criteria.value as string;\r\n case \"IsEmpty \": return false;\r\n case \"IsNotEmpty\": return true;\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n private getCurrentSettingFromQuery() {\r\n const fieldType = this.getFieldType(this.props.fieldTypeId);\r\n if (!fieldType || !this.props.query.dataCriteria) {\r\n return \"\\$All\";\r\n }\r\n const criteria = this.props.query.dataCriteria.find(data => data.fieldTypeId === this.props.fieldTypeId);\r\n if (!criteria || !criteria.value) {\r\n return \"\\$All\";\r\n }\r\n\r\n return fieldType.isMultiValue ? (criteria.value as string[]).find(e => true) : criteria.value as string;;\r\n }\r\n\r\n private getCvlValuesInLocale(cvl: ICVLModel, cvlValues: ICVLValueModel[]) {\r\n if (cvl.dataType === \"LocaleString\") {\r\n return cvlValues.map(cvlValue => {\r\n return { ...cvlValue, value: cvlValue.value[this.props.language] }\r\n })\r\n }\r\n\r\n return cvlValues;\r\n }\r\n\r\n private getCvl(fieldTypeId: string) {\r\n const fieldType = this.getFieldType(fieldTypeId);\r\n if (fieldType) {\r\n return this.props.cvls.find(cvl => cvl.id === fieldType.cvlId);\r\n }\r\n return undefined;\r\n }\r\n\r\n private getFieldType(fieldTypeId: string) {\r\n return this.props.entityTypes\r\n .map(entityType => entityType.fieldTypes as IFieldTypeModel[])\r\n .map(fieldTypes => fieldTypes.find(fieldType => fieldType.fieldTypeId && fieldType.fieldTypeId === fieldTypeId))\r\n .find(fieldType => fieldType !== undefined);\r\n }\r\n\r\n private getEntityType(fieldTypeId: string) {\r\n return this.props.entityTypes.find(entityType =>\r\n entityType.fieldTypes\r\n && entityType.fieldTypes.find(fieldType => fieldType.fieldTypeId === fieldTypeId));\r\n }\r\n\r\n private createChangeHandler() {\r\n return (e: React.ChangeEvent) => {\r\n const fieldType = this.getFieldType(this.props.fieldTypeId);\r\n if (!fieldType) {\r\n return;\r\n }\r\n if (e.target.value === \"\\$All\") {\r\n this.props.updateQuery({} as IQueryModel);\r\n return;\r\n }\r\n this.props.updateQuery({\r\n dataCriteria: [{\r\n \"fieldTypeId\": this.props.fieldTypeId,\r\n \"operator\": fieldType.isMultiValue ? \"ContainsAny\" : \"Equal\",\r\n \"value\": fieldType.isMultiValue ? [e.target.value] : e.target.value\r\n }]\r\n });\r\n };\r\n }\r\n};\r\n\r\nexport default WrapQueryContext(CvlFilter);","import * as React from \"react\";\r\nimport QueryContext, { IQueryContextValue } from \"./QueryContext\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel } from \"../../InRiverApiClient/models\";\r\nimport { WrapQueryContext } from \"./QueryContextWrapper\";\r\nimport * as _ from \"underscore\";\r\n\r\nexport interface IEntityTypeFilterProps {\r\n entityTypeId: string\r\n}\r\n\r\nclass EntityTypeFilter extends React.Component {\r\n public componentDidMount() {\r\n this.updateQuery();\r\n }\r\n\r\n public componentDidUpdate() {\r\n this.updateQuery();\r\n }\r\n\r\n public render() {\r\n return null;\r\n }\r\n\r\n private updateQuery() {\r\n const newQuery = {\r\n systemCriteria: [\r\n {\r\n type: \"EntityTypeId\",\r\n operator: \"Equal\",\r\n value: this.props.entityTypeId\r\n }\r\n ]\r\n } as IQueryModel;\r\n\r\n if (!_.isEqual(newQuery, this.props.query)) {\r\n this.props.updateQuery(newQuery);\r\n }\r\n }\r\n\r\n \r\n}\r\n\r\nexport default WrapQueryContext(EntityTypeFilter);","import * as React from 'react';\r\n\r\nexport interface IEntityListContextValue {\r\n allIds: number[],\r\n visibleIds: number[],\r\n setVisibleIds?: (a: number[]) => void,\r\n language: string\r\n}\r\n\r\nconst EntityListContext = React.createContext({\r\n allIds: [] as number[],\r\n visibleIds: [] as number[],\r\n language: \"en\"\r\n} as IEntityListContextValue);\r\n\r\nexport default EntityListContext;","import * as React from \"react\";\r\nimport EntityListContext, { IEntityListContextValue } from \"./EntityListContext\";\r\n\r\nexport function WrapEntityListContext(WrappedComponent: React.ComponentType) {\r\n const displayName =\r\n WrappedComponent.displayName || WrappedComponent.name || \"Component\";\r\n\r\n return class extends React.Component {\r\n public render() {\r\n return {\r\n context => \r\n }\r\n \r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport EntityListContext, { IEntityListContextValue } from './EntityListContext';\r\nimport { IEntityDataModel, IEntitySummaryModel } from '../../InRiverApiClient/models';\r\nimport { EntityHttpSvc } from '../../InRiverApiClient/EntityHttpSvc';\r\nimport * as _ from \"underscore\";\r\nimport { entityHttpSvc } from \"../../services/InRiverApiClient\"\r\nimport { WrapEntityListContext } from './EntityListContextWrapper';\r\ninterface IEntitiesState {\r\n entities: IEntityDataModel[];\r\n promise: Promise;\r\n\r\n}\r\nexport interface IEntitiesProps {\r\n fields: string[],\r\n onError?: (error) => void \r\n}\r\n\r\nclass Entities extends React.Component {\r\n public constructor(props: IEntitiesProps & IEntityListContextValue) {\r\n super(props);\r\n\r\n this.state = { entities: [], promise: Promise.resolve([]) };\r\n }\r\n\r\n public render() {\r\n if (!this.state) {\r\n return null;\r\n }\r\n const renderCall = this.props.children as any;\r\n\r\n return this.state.entities.map((entity, index) => {\r\n return \r\n {renderCall(entity)} \r\n \r\n });\r\n }\r\n\r\n public componentDidMount() {\r\n this.fetchData(this.props.visibleIds);\r\n }\r\n\r\n public componentDidUpdate(prevProps: IEntityListContextValue) {\r\n if (!_.isEqual(prevProps.visibleIds, this.props.visibleIds)) {\r\n this.fetchData(this.props.visibleIds);\r\n }\r\n }\r\n\r\n private fetchData(ids: number[]) {\r\n this.setState({\r\n ...this.state,\r\n promise: this.state.promise.then(p =>\r\n entityHttpSvc.postFetchData({\r\n objects: \"EntitySummary,FieldValues\",\r\n entityIds: ids,\r\n fieldTypeIds: this.props.fields.join(\",\")\r\n }).then(result => {\r\n this.setState({ ...this.state, entities: result });\r\n }, err => this.props.onError && this.props.onError(err)\r\n ))\r\n });\r\n }\r\n}\r\n\r\n\r\nexport default WrapEntityListContext(Entities);\r\n\r\n","import * as React from 'react';\r\nimport EntityListContext from './EntityListContext';\r\nimport * as _ from \"underscore\";\r\n\r\nexport interface IEntityListProps {\r\n ids: number[],\r\n language: string\r\n}\r\n\r\nexport interface IEntityListState {\r\n visibleIds: number[]\r\n}\r\n\r\nexport default class EntityList extends React.Component {\r\n \r\n public render() {\r\n const allIds = this.props.ids;\r\n const visibleIds = this.state && this.state.visibleIds ? this.state.visibleIds : [] as number[];\r\n const setVisibleIds = (ids: number[]) => this.setVisibleIds(ids);\r\n const language = this.props.language;\r\n\r\n return \r\n {this.props.children}\r\n \r\n }\r\n\r\n private setVisibleIds(ids: number[]) {\r\n if (!this.state || !_.isEqual(ids, this.state.visibleIds)) {\r\n this.setState({ visibleIds: ids });\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport EntityListContext, { IEntityListContextValue } from './EntityListContext';\r\nimport * as _ from \"underscore\";\r\nimport { WrapEntityListContext } from './EntityListContextWrapper';\r\n\r\nexport interface IShowMoreButtonBaseProps {\r\n label: string;\r\n initialNumberOfShownEntities: number;\r\n increment: number;\r\n allIds: number[];\r\n visibleIds: number[];\r\n setVisibleIds?: (a: number[]) => void;\r\n}\r\nexport interface IShowMoreButtonProps {\r\n label: string;\r\n initialNumberOfShownEntities: number;\r\n increment: number;\r\n}\r\n\r\nexport class ShowMoreButton extends React.Component {\r\n\r\n constructor(props: IShowMoreButtonProps & IEntityListContextValue) {\r\n super(props);\r\n this.setInitialVisibleEntities();\r\n }\r\n\r\n public render() {\r\n if (this.props.allIds.length === this.props.visibleIds.length) {\r\n return null;\r\n }\r\n\r\n return ;\r\n }\r\n\r\n public componentDidUpdate(prevProps) {\r\n if (!_.isEqual(prevProps.allIds, this.props.allIds)) {\r\n this.setInitialVisibleEntities();\r\n }\r\n }\r\n\r\n private setInitialVisibleEntities() {\r\n if (this.props.setVisibleIds) {\r\n this.props.setVisibleIds(this.props.allIds.slice(0, this.props.initialNumberOfShownEntities));\r\n }\r\n }\r\n\r\n private showMore() {\r\n if (this.props.setVisibleIds) {\r\n this.props.setVisibleIds(this.props.allIds.slice(0, this.props.visibleIds.length + this.props.increment));\r\n }\r\n }\r\n}\r\n\r\nexport default WrapEntityListContext(ShowMoreButton);","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { Link } from 'react-router-dom';\r\nimport { IEntityDataModel, ICVLValueModel, IFieldValueModel } from '../InRiverApiClient/models';\r\nimport { useStores } from '../hooks/UseStores'\r\n\r\nfunction getField(entity: IEntityDataModel, fieldTypeId: string): IFieldValueModel | undefined {\r\n if (!entity.fieldValues) {\r\n return undefined;\r\n }\r\n\r\n return entity.fieldValues.find(f => f.fieldTypeId === fieldTypeId);\r\n}\r\n\r\nfunction getCvlValue(entity: IEntityDataModel, fieldTypeId: string, cvlValues?: ICVLValueModel[]): ICVLValueModel | undefined {\r\n if (!cvlValues) {\r\n return undefined;\r\n }\r\n\r\n const field = getField(entity, fieldTypeId);\r\n if (field) {\r\n return cvlValues.find(cvl => cvl.key && cvl.key === field.value); \r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nconst defaultPhoto = \"https://asset.productmarketingcloud.com/api/assetstorage/994_0ceaa648-b8dc-4009-8e1b-8351d2800be3/\";\r\nexport const ProductCard = observer((entity: IEntityDataModel) => {\r\n const { modelStore } = useStores();\r\n if (!modelStore.cvlValues) {\r\n return null;\r\n }\r\n\r\n const id = entity.entityId;\r\n const language = \"en\";\r\n\r\n const nameField = getField(entity, \"ServiceCommercialName\");\r\n const name = nameField && nameField.value ? nameField.value[language] : \"\";\r\n\r\n const businessAreaCvlValue = getCvlValue(entity, \"ServiceBusinessArea\", modelStore.cvlValues.get(\"BusinessArea\"));\r\n const businessArea = businessAreaCvlValue ? businessAreaCvlValue.value as string : \"\";\r\n\r\n const categoryCvlValue = getCvlValue(entity, \"ServiceCommercialCategory\", modelStore.cvlValues.get(\"CommercialCategory\"));\r\n const category = categoryCvlValue ? categoryCvlValue.value as string : \"\";\r\n\r\n const scope = getCvlValue(entity, \"ServiceScope\", modelStore.cvlValues.get(\"Scope\"));\r\n const isLocalVariant = (scope && scope.key === \"LocalVariant\");\r\n\r\n const imageSrc = entity.summary && entity.summary.resourceUrl ? entity.summary.resourceUrl : defaultPhoto;\r\n return
\r\n \r\n \"product\"\r\n \r\n \r\n
\r\n {isLocalVariant && Local Variant}\r\n

{name}

\r\n\r\n
    \r\n
  • \r\n
    Business area:
    \r\n
    {businessArea}
    \r\n
  • \r\n
  • \r\n
    Commercial Category:
    \r\n
    {category}
    \r\n
  • \r\n
\r\n
\r\n \r\n
;\r\n});\r\n\r\n","import * as React from \"react\";\r\nimport QueryContext, { IQueryContextValue } from \"./QueryContext\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel } from \"../../InRiverApiClient/models\";\r\nimport * as _ from \"underscore\";\r\nimport { WrapQueryContext } from \"./QueryContextWrapper\";\r\n\r\nexport interface IMultiSelectCvlFilterProps {\r\n label: string,\r\n fieldTypeId: string,\r\n\r\n}\r\n\r\nclass MultiSelectCvlFilter extends React.Component{\r\n public render() {\r\n const cvl = this.getCvl(this.props.fieldTypeId, this.props.entityTypes, this.props.cvls);\r\n if (!cvl) {\r\n return ;\r\n }\r\n const values = this.getCvlValuesInLocale(cvl, this.props.cvlValues.get(cvl && cvl.id ? cvl.id : \"\"), this.props.language);\r\n if (!values) {\r\n return ;\r\n }\r\n\r\n const settings = this.getCurrentSettingFromQuery(this.props.query);\r\n const changeHandler = this.createChangeHandler(cvl, this.props.query, this.props.language, this.props.updateQuery);\r\n\r\n return
\r\n
Business area
\r\n {\r\n values.map(value => {\r\n return
\r\n \r\n \r\n
;\r\n })\r\n }\r\n
;\r\n }\r\n\r\n private getCurrentSettingFromQuery(query: IQueryModel) {\r\n if (!query || !query.dataCriteria) {\r\n return [];\r\n }\r\n const criteria = query.dataCriteria.find(data => data.fieldTypeId === this.props.fieldTypeId);\r\n if (!criteria || !criteria.value) {\r\n return [];\r\n }\r\n\r\n const keys = criteria.value ? criteria.value as string : \"\";\r\n\r\n return keys.split(\",\");\r\n }\r\n\r\n private createChangeHandler(cvl: ICVLModel, query: IQueryModel, language: string, updateQueryCallback: (IQueryModel) => void) {\r\n const settings = this.getCurrentSettingFromQuery(query);\r\n\r\n return (event: React.ChangeEvent) => {\r\n const key = event.target.id;\r\n const newSettings = [key].filter(x => event.target.checked || x !== key); \r\n if (_.isEqual(newSettings, settings)) {\r\n return;\r\n }\r\n\r\n if (newSettings.length === 0) {\r\n updateQueryCallback({});\r\n return;\r\n }\r\n\r\n updateQueryCallback({\r\n dataCriteria: [\r\n {\r\n fieldTypeId: this.props.fieldTypeId,\r\n language: cvl.dataType === \"LocaleString\" ? language : undefined,\r\n operator: \"Equal\", // TODO: inriver donot support contains all/any!\r\n value: newSettings.join(\",\")\r\n }\r\n ]\r\n } as IQueryModel);\r\n }\r\n }\r\n\r\n private getCvlValuesInLocale(cvl: ICVLModel, cvlValues: ICVLValueModel[] | undefined, language: string): ICVLValueModel[] | undefined {\r\n if (!cvlValues) {\r\n return undefined;\r\n }\r\n if (cvl.dataType === \"LocaleString\") {\r\n return cvlValues.map(cvlValue => {\r\n return { ...cvlValue, value: cvlValue.value[language]};\r\n });\r\n }\r\n\r\n return cvlValues;\r\n }\r\n\r\n\r\n private getCvl(fieldTypeId: string, entityTypes?: IEntityTypeModel[], cvls?: ICVLModel[]) {\r\n if (!cvls) {\r\n return undefined;\r\n }\r\n const fieldType = this.getFieldType(fieldTypeId, entityTypes);\r\n if (fieldType) {\r\n return cvls.find(cvl => cvl.id === fieldType.cvlId);\r\n }\r\n return undefined;\r\n }\r\n\r\n private getFieldType(fieldTypeId: string, entityTypes?: IEntityTypeModel[]) {\r\n if (!entityTypes) {\r\n return undefined;\r\n }\r\n return entityTypes\r\n .map(entityType => entityType.fieldTypes as IFieldTypeModel[])\r\n .map(fieldTypes => fieldTypes.find(fieldType => fieldType.fieldTypeId && fieldType.fieldTypeId === fieldTypeId))\r\n .find(fieldType => fieldType !== undefined);\r\n }\r\n}\r\n\r\nexport default WrapQueryContext(MultiSelectCvlFilter);","import * as React from \"react\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel, IDataCriterionModel } from \"../../InRiverApiClient/models\";\r\nimport { Filter } from \"./Filter\";\r\nimport { WrapQueryContext } from \"./QueryContextWrapper\";\r\nimport { IQueryContextValue } from \"./QueryContext\";\r\n\r\nclass FilterGroup extends React.Component<{children: any} & IQueryContextValue> {\r\n public render() {\r\n return this.props.updateQuery(q)}\r\n language={this.props.language}>\r\n {this.props.children}\r\n \r\n }\r\n}\r\n\r\nexport default WrapQueryContext(FilterGroup);","import * as React from \"react\";\r\nimport QueryContext, { IQueryContextValue } from \"./QueryContext\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel, IDataCriterionModel } from \"../../InRiverApiClient/models\";\r\nimport { WrapQueryContext } from \"./QueryContextWrapper\";\r\n\r\nexport interface IHierarchyCvlFilterProps {\r\n fieldTypeIds: string[],\r\n\r\n}\r\n\r\ninterface IHierarchyEntry {\r\n key: string,\r\n value: string,\r\n fieldTypeId: string,\r\n isMultiValue: boolean,\r\n isExpanded: boolean,\r\n isSelected: boolean,\r\n subItems: IHierarchyEntry[]\r\n}\r\n\r\nclass HierarchyCvlFilter extends React.Component{\r\n public render() {\r\n const fieldTypes = this.getValidatedFieldTypes()\r\n if (!fieldTypes || fieldTypes.length === 0) {\r\n return
Invalid hierarchy
;\r\n }\r\n const hierarchy = this.getHierarchyStructure(fieldTypes, \"\");\r\n \r\n return
    \r\n {hierarchy.map(x =>
  • \r\n {this.renderItem(x)}\r\n {x.isExpanded ? this.renderSublist(x.subItems) : null}\r\n
  • )}\r\n
;\r\n }\r\n\r\n private renderSublist(hierarchy: IHierarchyEntry[]) {\r\n if (hierarchy.length <= 0) {\r\n return null;\r\n }\r\n\r\n return
    \r\n {hierarchy.map(x => {\r\n return
  • \r\n {this.renderItem(x)}\r\n {x.isExpanded ? this.renderSublist(x.subItems) : null}\r\n
  • ;\r\n })}\r\n\r\n
\r\n }\r\n\r\n private renderItem(entry: IHierarchyEntry) {\r\n return ;\r\n }\r\n\r\n private getHierarchyStructure(fieldTypes: IFieldTypeModel[], parentCvlKey: string): IHierarchyEntry[] {\r\n if (fieldTypes.length <= 0) {\r\n return [];\r\n }\r\n\r\n const first = fieldTypes[0];\r\n const cvlValues = this.getCvlValuesInLocale(first.cvlId || \"\").filter(x => parentCvlKey === \"\" || x.parentKey === parentCvlKey);\r\n const setting = this.getCurrentSetting();\r\n\r\n return cvlValues.map(x => {\r\n const subItemlist = this.getHierarchyStructure(fieldTypes.slice(1), x.key as string);\r\n const selected = this.isSelected(first, x, setting);\r\n return {\r\n fieldTypeId: first.fieldTypeId,\r\n isMultiValue: first.isMultiValue,\r\n key: x.key,\r\n value: x.value,\r\n subItems: subItemlist,\r\n isSelected: selected,\r\n isExpanded: selected || this.isExpanded(first, x, subItemlist, setting)\r\n } as IHierarchyEntry\r\n });\r\n }\r\n\r\n private isExpanded(fieldType: IFieldTypeModel, cvlValue: ICVLValueModel, subItems: IHierarchyEntry[], setting?: IDataCriterionModel) {\r\n if (!setting) {\r\n return false;\r\n }\r\n\r\n if (setting.fieldTypeId === fieldType.fieldTypeId) {\r\n const selectedValue = fieldType.isMultiValue ? (setting.value as string[]).find(x => true) : setting.value as string;\r\n return selectedValue === cvlValue.key;\r\n }\r\n\r\n return subItems.reduce((result, next) => result || next.isExpanded, false);\r\n }\r\n\r\n private isSelected(fieldType: IFieldTypeModel, cvlValue: ICVLValueModel, setting?: IDataCriterionModel) {\r\n if (!setting) {\r\n return false;\r\n }\r\n\r\n if (setting.fieldTypeId === fieldType.fieldTypeId) {\r\n const selectedValue = fieldType.isMultiValue ? (setting.value as string[]).find(x => true) : setting.value as string;\r\n return selectedValue === cvlValue.key;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private updateOrClearQuery(entry) {\r\n\r\n if (entry.isSelected || entry.isExpanded) {\r\n this.props.updateQuery({});\r\n }\r\n else {\r\n this.props.updateQuery({\r\n dataCriteria: [{\r\n \"fieldTypeId\": entry.fieldTypeId,\r\n \"operator\": entry.isMultiValue ? \"ContainsAny\" : \"Equal\",\r\n \"value\": entry.isMultiValue ? [entry.key] : entry.key\r\n }]\r\n });\r\n }\r\n }\r\n\r\n private getCurrentSetting() {\r\n if (!this.props.query || !this.props.query.dataCriteria) {\r\n return undefined;\r\n }\r\n\r\n return this.props.query.dataCriteria.find(dc => this.props.fieldTypeIds.includes(dc.fieldTypeId || \"\"));\r\n }\r\n\r\n private getValidatedFieldTypes() {\r\n const fieldTypes = this.props.fieldTypeIds.map(id => this.getFieldType(id));\r\n for (let i = 0; i < fieldTypes.length; i++) {\r\n const curr = fieldTypes[i];\r\n\r\n if (!curr) {\r\n return undefined;\r\n }\r\n\r\n if (i !== 0) {\r\n const prev = fieldTypes[i - 1] as IFieldTypeModel;\r\n if (curr.parentCvlId !== prev.cvlId) {\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n\r\n return fieldTypes as IFieldTypeModel[];\r\n }\r\n\r\n private getCvlValuesInLocale(cvlId : string) {\r\n const cvl = this.props.cvls.find(x => x.id === cvlId);\r\n if (!cvl || !cvl.id) {\r\n return [];\r\n }\r\n const cvlValues = this.props.cvlValues.get(cvl.id);\r\n if (!cvlValues) {\r\n return [];\r\n }\r\n if (cvl.dataType === \"LocaleString\") {\r\n return cvlValues.map(cvlValue => {\r\n return { ...cvlValue, value: cvlValue.value[this.props.language] }\r\n })\r\n }\r\n\r\n return cvlValues;\r\n }\r\n\r\n private getFieldType(fieldTypeId: string) {\r\n return this.props.entityTypes\r\n .map(entityType => entityType.fieldTypes as IFieldTypeModel[])\r\n .map(fieldTypes => fieldTypes.find(fieldType => fieldType.fieldTypeId && fieldType.fieldTypeId === fieldTypeId))\r\n .find(fieldType => fieldType !== undefined);\r\n }\r\n}\r\n\r\nexport default WrapQueryContext(HierarchyCvlFilter)","import * as React from \"react\";\r\nimport QueryContext, { IQueryContextValue } from \"./QueryContext\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel } from \"../../InRiverApiClient/models\";\r\nimport { WrapQueryContext } from \"./QueryContextWrapper\";\r\nimport * as _ from \"underscore\";\r\n\r\nexport interface IFieldValueFilterProps {\r\n fieldTypeId: string,\r\n operator: string,\r\n value?: string | string[]\r\n}\r\n\r\nclass FieldValueFilter extends React.Component {\r\n public componentDidMount() {\r\n this.updateQuery();\r\n }\r\n\r\n public componentDidUpdate() {\r\n this.updateQuery()\r\n }\r\n\r\n public componentWillUnmount() {\r\n this.props.updateQuery({});\r\n }\r\n\r\n public render() {\r\n return null;\r\n }\r\n\r\n private updateQuery() {\r\n const newQuery = {\r\n dataCriteria: [\r\n {\r\n fieldTypeId: this.props.fieldTypeId,\r\n operator: this.props.operator,\r\n value: this.props.value\r\n }\r\n ]\r\n } as IQueryModel;\r\n\r\n if (!_.isEqual(newQuery, this.props.query)) {\r\n this.props.updateQuery(newQuery);\r\n }\r\n }\r\n}\r\n\r\nexport default WrapQueryContext(FieldValueFilter);","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\n\r\nexport const Loader = observer(() => {\r\n\r\n return
\r\n \r\n \r\n \r\n
\r\n});\r\n","import * as React from 'react';\r\nimport { Filter } from '../components/Filtering/Filter';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport CvlFilter from '../components/Filtering/CvlFilter';\r\nimport EntityTypeFilter from '../components/Filtering/EntityTypeFilter';\r\nimport Entities from '../components/EntityList/Entities';\r\nimport EntityList from '../components/EntityList/EntityList';\r\nimport ShowMoreButton from '../components/EntityList/ShowMoreButton';\r\nimport { ProductCard } from '../components/ProductCard';\r\nimport MultiSelectCvlFilter from '../components/Filtering/MultiSelectCvlFilter';\r\nimport FilterGroup from '../components/Filtering/FilterGroup';\r\nimport HierarchyCvlFilter from '../components/Filtering/HierarchyCvlFilter';\r\nimport FieldValueFilter from '../components/Filtering/FieldValueFilter';\r\nimport { ICVLValueModel } from '../InRiverApiClient/models';\r\nimport { Loader } from '../components/Loader';\r\n\r\n\r\nexport interface ICatalogProps {\r\n hide: boolean\r\n}\r\n\r\nfunction filterCvlValues(values: Map) {\r\n const result = new Map();\r\n values.forEach((value, key) => {\r\n if ([\"Model\", \"ModelVariant\"].includes(key)) {\r\n result.set(key, value.filter(x => x.key !== `All${x.parentKey}`));\r\n } else {\r\n result.set(key, value);\r\n }\r\n })\r\n\r\n return result;\r\n}\r\n\r\nexport const Catalog = observer((props: ICatalogProps) => {\r\n const { modelStore, searchStore, catalogStore } = useStores();\r\n\r\n if (modelStore.ready) {\r\n return
\r\n
\r\n
\r\n \r\n
Filter
\r\n \r\n
\r\n\r\n
\r\n
\r\n

Services

\r\n searchStore.setQuery(q)} cvls={modelStore.cvls} cvlValues={filterCvlValues(modelStore.cvlValues)} entityTypes={modelStore.entityTypes} language=\"en\" >\r\n \r\n \r\n {searchStore.searchString && (/_/.test(searchStore.searchString) ?\r\n :\r\n )}\r\n catalogStore.setBusinessAreaQuery(q)} />\r\n catalogStore.setCategoryQuery(q)} />\r\n
\r\n
Turbine
\r\n \r\n
\r\n catalogStore.setBrandQuery(q)} />\r\n
\r\n
\r\n catalogStore.setTurbineQuery(q)} />\r\n
\r\n
\r\n catalogStore.setModelQuery(q)} />\r\n
\r\n
\r\n
\r\n
\r\n
SBU availability
\r\n
\r\n catalogStore.setSbuQuery(q)} />\r\n
\r\n
\r\n
\r\n
Country availability
\r\n
\r\n catalogStore.setCountryQuery(q)} />\r\n
\r\n
\r\n
\r\n
Development stage
\r\n
\r\n catalogStore.setDevelopmentStageQuery(q)} />\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n Showing {searchStore.resultEntityIds ? searchStore.resultEntityIds.length : 0} results\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
    \r\n {searchStore.searchString &&\r\n
  • \r\n \"{searchStore.searchString}\"\r\n \r\n
  • \r\n }\r\n {catalogStore.businessAreaQueryValue &&\r\n
  • \r\n {catalogStore.businessAreaQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.categoryQueryValue &&\r\n
  • \r\n {catalogStore.categoryQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.brandQueryValue &&\r\n
  • \r\n {catalogStore.brandQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.turbineQueryValue &&\r\n
  • \r\n {catalogStore.turbineQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.modelQueryValue &&\r\n
  • \r\n {catalogStore.modelQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.sbuQueryValue &&\r\n
  • \r\n {catalogStore.sbuQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.countryQueryValue &&\r\n
  • \r\n {catalogStore.countryQueryValue}\r\n \r\n
  • \r\n }\r\n {catalogStore.developmentStageQueryValue &&\r\n
  • \r\n {catalogStore.developmentStageQueryValue}\r\n \r\n
  • \r\n }\r\n
\r\n
\r\n\r\n \r\n
\r\n catalogStore.setError(true)} >\r\n {(s) => }\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
;\r\n\r\n }\r\n else {\r\n\r\n return
\r\n \r\n
\r\n }\r\n});\r\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores';\r\nimport * as ReactMarkdown from 'react-markdown';\r\n\r\nexport const InternalDescription = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n\r\n return
\r\n
Internal description
\r\n \r\n
\r\n});","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport * as ReactMarkdown from 'react-markdown';\r\n\r\nexport const ExternalDescription = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n\r\n return
\r\n
ShopVestas description
\r\n \r\n
\r\n});\r\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport * as ReactMarkdown from 'react-markdown';\r\n\r\nexport const Benefits = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n\r\n return
\r\n
\r\n
Benefits
\r\n \r\n
\r\n
\r\n});\r\n","import * as React from 'react';\r\nimport { InternalDescription } from './InternalDescription';\r\nimport { ExternalDescription } from './ExternalDescription';\r\nimport { Benefits } from './Benefits';\r\nimport { observer } from 'mobx-react';\r\n\r\n\r\nexport const DescriptionAndBenefits = observer(() => {\r\n\r\n return
\r\n
\r\n

Description and benefits

\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n});","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\n\r\nexport const ProductDetails = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n\r\n return
\r\n
\r\n

Details

\r\n
\r\n\r\n
\r\n
\r\n
\r\n
Details
\r\n\r\n
\r\n {\r\n detailsStore.details.map((detail, index) =>\r\n
\r\n
{detail.name}
\r\n
{detail.value}
\r\n
\r\n )\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n});","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport { ICompatibleTurbineObject } from '../model/CompatibleTurbineObject';\r\nimport { useState } from 'react';\r\n\r\nexport const CompatibleTurbines = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n const [turbinesShowLimit, setTurbineShowLimit] = useState(true);\r\n\r\n const turbineList: ICompatibleTurbineObject[] = turbinesShowLimit ? detailsStore.compatibleTurbinesList.slice(0, 10) : detailsStore.compatibleTurbinesList;\r\n\r\n const section = (turbineListParam: ICompatibleTurbineObject[]) => {\r\n\r\n return Array.from(new Set(turbineListParam.map(turbine => turbine.brand))).map((brand, turbineIndex) =>
\r\n\r\n

{brand}

\r\n\r\n {\r\n Array.from(new Set(turbineListParam.filter(turbine => turbine.brand === brand).map(t => t.model))).map((model, modelIndex) =>\r\n
\r\n
\r\n\r\n
{model}
\r\n
\r\n\r\n {\r\n Array.from(new Set(turbineListParam.filter(turbine => turbine.brand === brand && turbine.model === model).map(t => t.mw))).map((mw, mwIndex) =>\r\n
\r\n
{mw}
\r\n\r\n
\r\n {turbineListParam.filter(turbine => turbine.brand === brand && turbine.model === model && turbine.mw === mw).map(t => t.mark).join(\", \")}\r\n
\r\n
\r\n )\r\n }\r\n
\r\n
\r\n
\r\n )\r\n }\r\n
)\r\n };\r\n\r\n const compatibleTurbineSection = (turbineList.length > 0) ? section(turbineList) :
N/A
;\r\n const showAllClassName = ((detailsStore.compatibleTurbinesList.length > 10) && turbinesShowLimit === true) ? \"c-compatible-turbines__link u-link-small\" : \"hidden\";\r\n\r\n return
\r\n
\r\n

Compatible turbines

\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n});\r\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\n\r\nexport const AvailabilityAndContacts = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n const sbusStringToShow = (detailsStore.sbus.length > 0) ? detailsStore.sbus.join(\", \") : \"N/A\";\r\n const countriesStringToShow = (detailsStore.countries.length > 0) ? detailsStore.countries.join(\", \") : \"N/A\";\r\n\r\n return
\r\n
\r\n

Availability and contact

\r\n
\r\n\r\n
\r\n
\r\n
\r\n
Availability
\r\n\r\n
\r\n
SBU's
\r\n

{sbusStringToShow}

\r\n\r\n
Countries
\r\n

{countriesStringToShow}

\r\n
\r\n
\r\n\r\n
\r\n\r\n
Contact
\r\n
\r\n {\r\n detailsStore.contacts.map((contact, index) =>\r\n
\r\n
{contact.area}
\r\n
{contact.person}
\r\n
\r\n )\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n });","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores';\r\nimport { IDocumentationObject } from '../model/DocumentationObject';\r\n\r\n\r\nfunction openInNewTab(link: string) {\r\n window.open(\r\n link, \"_blank\"); \r\n}\r\n\r\nfunction generateDocumentationSection(documentation: IDocumentationObject[]) {\r\n\r\n if (documentation.length > 0) {\r\n return documentation.map((document, index) =>\r\n
\r\n
{document.subType}
\r\n \r\n
\r\n );\r\n }\r\n else {\r\n return
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n }\r\n}\r\n\r\nexport const Documentation = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n\r\n return
\r\n
\r\n

Documentation

\r\n

{detailsStore.technicalDocumentation.length + detailsStore.commercialDocumentation.length} documents available. Please select turbine details to display matching documents.

\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
{detailsStore.filteredTechnicalDocumentation.length + detailsStore.filteredCommercialDocumentation.length} documents match the criteria
\r\n
\r\n\r\n
\r\n
Technical documentation
\r\n\r\n
\r\n {\r\n generateDocumentationSection(detailsStore.filteredTechnicalDocumentation)\r\n }\r\n
\r\n
\r\n\r\n
\r\n
Commercial documentation
\r\n\r\n
\r\n {\r\n generateDocumentationSection(detailsStore.filteredCommercialDocumentation)\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n});\r\n","import * as React from \"react\";\r\nimport { IQueryModel, IEntityTypeModel, ICVLModel, IFieldTypeModel, ICVLValueModel } from \"../../InRiverApiClient/models\";\r\nimport EntityListContext, { IEntityListContextValue } from \"./EntityListContext\";\r\nimport { WrapEntityListContext } from \"./EntityListContextWrapper\";\r\n\r\nclass ShowAll extends React.Component {\r\n public componentDidMount() {\r\n if (this.props.setVisibleIds) {\r\n this.props.setVisibleIds(this.props.allIds);\r\n }\r\n }\r\n\r\n public render() {\r\n return null;\r\n }\r\n\r\n public componentDidUpdate(prevProps) {\r\n if (this.props.setVisibleIds) {\r\n this.props.setVisibleIds(this.props.allIds);\r\n }\r\n }\r\n}\r\n\r\nexport default WrapEntityListContext<{}>(ShowAll);","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport EntityList from './EntityList/EntityList';\r\nimport Entities from './EntityList/Entities';\r\nimport { ProductCard } from './ProductCard';\r\nimport ShowAll from './EntityList/ShowAll';\r\nimport { useEffect } from 'react';\r\n\r\n// Go to top of page when a related service is clicked\r\n\r\n\r\nexport const RelatedServices = observer(() => {\r\n\r\n const { detailsStore } = useStores();\r\n\r\n const mainClassName: string = (detailsStore.relatedServices.length > 0) ? \"c-product-related__section\" : \"hidden\";\r\n\r\n useEffect(() => {\r\n\r\n window.scrollTo(0, 0);\r\n });\r\n\r\n return
\r\n
\r\n

Related services

\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n {(s) => }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n});","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useEffect, useState } from 'react';\r\n\r\nexport interface INavigationBarProps {\r\n descriptionAndBenefitsRef?: React.RefObject\r\n detailsRef?: React.RefObject\r\n compatibleTurbinesRef?: React.RefObject\r\n availabilityRef?: React.RefObject\r\n documentationRef?: React.RefObject\r\n relatedServicesRef?: React.RefObject\r\n}\r\n\r\nconst scrollTo = (event: React.MouseEvent, barRef: React.RefObject, ref?: React.RefObject) => {\r\n event.preventDefault();\r\n const height = barRef.current ? barRef.current.clientHeight : 0;\r\n const padding = height / 8;\r\n window.scrollTo(0, ref && ref.current ? ref.current.offsetTop - height - padding : 0);\r\n\r\n}\r\n\r\nconst inactiveClassName: string = \"c-product-navigation__link\";\r\nconst activeClassName: string = \"c-product-navigation__link c-product-navigation__link--active\";\r\n\r\nexport const NavigationBar = observer((props: INavigationBarProps) => {\r\n\r\n const [descriptionAndBenefitsClassName, setDescriptionAndBenefitsClassName] = useState(inactiveClassName);\r\n const [detailsClassName, setDetailsClassName] = useState(inactiveClassName);\r\n const [compatibleTurbinesClassName, setCompatibleTurbinesClassName] = useState(inactiveClassName);\r\n const [availabilityClassName, setAvailabilityClassName] = useState(inactiveClassName);\r\n const [documentationClassName, setDocumentationClassName] = useState(inactiveClassName);\r\n const [relatedServiceClassName, setRelatedServiceClassName] = useState(inactiveClassName);\r\n\r\n const barRef = React.useRef(null);\r\n\r\n function findCurrentElementAndSetActive(position: number) {\r\n\r\n const barHeight = barRef.current ? barRef.current.clientHeight*1.5 : 0;\r\n\r\n const descriptionAndBenefitsPosition = props.descriptionAndBenefitsRef && props.descriptionAndBenefitsRef.current ? props.descriptionAndBenefitsRef.current.offsetTop - barHeight : 0;\r\n const detailsPosition = props.detailsRef && props.detailsRef.current ? props.detailsRef.current.offsetTop - barHeight: 0;\r\n const compatibleTurbinesPosition = props.compatibleTurbinesRef && props.compatibleTurbinesRef.current ? props.compatibleTurbinesRef.current.offsetTop - barHeight: 0;\r\n const availabilityPosition = props.availabilityRef && props.availabilityRef.current ? props.availabilityRef.current.offsetTop - barHeight : 0;\r\n const documentationPosition = props.documentationRef && props.documentationRef.current ? props.documentationRef.current.offsetTop - barHeight : 0;\r\n const relatedServicesPosition = props.relatedServicesRef && props.relatedServicesRef.current ? props.relatedServicesRef.current.offsetTop - barHeight : 0;\r\n\r\n setAllToInactive();\r\n if (position <= descriptionAndBenefitsPosition || position > descriptionAndBenefitsPosition && position < documentationPosition) {\r\n\r\n setDescriptionAndBenefitsClassName(activeClassName);\r\n\r\n }\r\n else if (position >= documentationPosition && position < compatibleTurbinesPosition) {\r\n\r\n setDocumentationClassName(activeClassName);\r\n }\r\n else if (position >= compatibleTurbinesPosition && position < availabilityPosition) {\r\n\r\n setCompatibleTurbinesClassName(activeClassName);\r\n }\r\n else if (position >= availabilityPosition && position < detailsPosition) {\r\n\r\n setAvailabilityClassName(activeClassName);\r\n }\r\n else if (position >= detailsPosition && position < relatedServicesPosition) {\r\n\r\n setDetailsClassName(activeClassName);\r\n }\r\n else if (position >= relatedServicesPosition) {\r\n\r\n setRelatedServiceClassName(activeClassName);\r\n }\r\n }\r\n\r\n function setAllToInactive() {\r\n\r\n setDescriptionAndBenefitsClassName(inactiveClassName);\r\n setDetailsClassName(inactiveClassName);\r\n setCompatibleTurbinesClassName(inactiveClassName);\r\n setAvailabilityClassName(inactiveClassName);\r\n setDocumentationClassName(inactiveClassName);\r\n setRelatedServiceClassName(inactiveClassName);\r\n }\r\n\r\n useEffect(() => {\r\n const onScroll = e => {\r\n\r\n const position = window.pageYOffset;\r\n findCurrentElementAndSetActive(position);\r\n\r\n };\r\n window.addEventListener(\"scroll\", onScroll);\r\n\r\n return () => window.removeEventListener(\"scroll\", onScroll);\r\n });\r\n\r\n return \r\n});","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\n\r\nexport const LanguageSelector = observer(() => {\r\n\r\n const { modelStore, detailsStore } = useStores();\r\n\r\n if (modelStore.ready) {\r\n\r\n return
    \r\n\r\n {\r\n modelStore.pimLanguages.filter(language => language && language.displayName && language.name).map(language =>\r\n\r\n
  • {\r\n \r\n detailsStore.setLanguage(language.name as string);\r\n }}>\r\n {language.displayName}\r\n \r\n
  • \r\n )\r\n }\r\n
\r\n }\r\n return ;\r\n});\r\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport * as ReactMarkdown from 'react-markdown';\r\nimport { LanguageSelector } from './LanguageSelector';\r\n\r\n\r\nexport const ServiceInfo = observer(() => {\r\n const { detailsStore, modelStore } = useStores();\r\n const [imageIndex, setImageIndex] = useState(0);\r\n const [showMoreDescription, setShowMoreDescription] = useState(false);\r\n const [languageSelectorVisible, setLanguageSelectorVisible] = useState(false);\r\n const descriptionMaxSize: number = 800;\r\n const isLocalVariant = (detailsStore.serviceInfoData.scope === \"LocalVariant\");\r\n\r\n const description: string = showMoreDescription || detailsStore.serviceInfoData.externalDescription.length < descriptionMaxSize\r\n ? detailsStore.serviceInfoData.externalDescription : detailsStore.serviceInfoData.externalDescription.slice(0, descriptionMaxSize) + \"...\";\r\n\r\n const languageSelectorRef = useRef(null);\r\n useOutsideAlerter(languageSelectorRef);\r\n\r\n function useOutsideAlerter(ref) {\r\n\r\n function handleClickOutside(event) {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n setLanguageSelectorVisible(false);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n \r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n });\r\n }\r\n\r\n if (modelStore.ready) {\r\n\r\n return
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {\r\n detailsStore.serviceInfoData.imageUrls.map((url, index) => {\r\n return
\r\n \"product\"\r\n
\r\n })\r\n }\r\n\r\n
\r\n\r\n
\r\n\r\n {\r\n detailsStore.serviceInfoData.imageUrls.map((url, index) => {\r\n return
\r\n \"product\" {\r\n\r\n setImageIndex(index);\r\n }\r\n } />\r\n
\r\n })\r\n }\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

\r\n \r\n \r\n {isLocalVariant && Local Variant}\r\n

\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
Description and benefits
\r\n
\r\n \r\n
\r\n\r\n {(!showMoreDescription && description.length > descriptionMaxSize) &&\r\n {\r\n e.preventDefault();\r\n setShowMoreDescription(true);\r\n }}>\r\n Show More\r\n \r\n }\r\n
\r\n
\r\n\r\n
\r\n
Key details
\r\n\r\n
\r\n {\r\n detailsStore.serviceInfoData.keyDetails.map((detail, index) =>\r\n
\r\n
{detail.name}
\r\n
{detail.value}
\r\n
\r\n )\r\n }\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
;\r\n }\r\n return ; \r\n})","import * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores'\r\n\r\n\r\nexport const ServiceTop = observer(() => {\r\n const { detailsStore, modelStore } = useStores();\r\n const subject: string = \"Wrong or missing data in the product catalogue - \" + detailsStore.serviceTopData.sapMaterialID;\r\n const body: string = \"Hi, please describe what is missing or incorrect in the product catalogue…\";\r\n const mailString: string = \"mailto:\" + detailsStore.contactMail + \"?subject=\" + subject + \"&body=\" + body;\r\n\r\n return
\r\n \r\n \r\n Back to catalogue\r\n \r\n\r\n \r\n \r\n Wrong or missing data?\r\n \r\n
\r\n});","import * as React from 'react';\r\n\r\nimport { DescriptionAndBenefits } from '../components/DescriptionAndBenefits';\r\nimport { ProductDetails } from '../components/ProductDetails';\r\nimport { CompatibleTurbines } from '../components/CompatibleTurbine';\r\nimport { AvailabilityAndContacts } from '../components/AvailabilityAndContact';\r\nimport { observer } from 'mobx-react';\r\nimport { Documentation } from '../components/Documentation';\r\nimport { RelatedServices } from '../components/RelatedServices';\r\nimport { NavigationBar } from '../components/NavigationBar';\r\nimport { ServiceInfo } from '../components/ServiceInfo';\r\nimport { ServiceTop } from '../components/ServiceTop';\r\nimport { useStores } from '../hooks/UseStores'\r\nimport { Loader } from '../components/Loader';\r\n\r\nexport const Details = observer(() => {\r\n const descriptionAndBenefitsRef = React.useRef(null);\r\n const detailsRef = React.useRef(null);\r\n const compatibleTurbinesRef = React.useRef(null);\r\n const availabilityRef = React.useRef(null);\r\n const documentationRef = React.useRef(null);\r\n const relatedServicesRef = React.useRef(null);\r\n const { detailsStore } = useStores();\r\n\r\n return \r\n\r\n \r\n \r\n \r\n\r\n
\r\n\r\n {!detailsStore.isLoaded &&
\r\n \r\n
}\r\n\r\n {detailsStore.isLoaded &&
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
}\r\n
\r\n
\r\n});\r\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useStores } from '../hooks/UseStores';\r\n\r\nexport const SearchBar = observer(() => {\r\n const { searchStore, routingStore, catalogStore } = useStores();\r\n const onCatalog = routingStore.location.pathname === \"/\";\r\n\r\n return
{\r\n e.preventDefault();\r\n if (!onCatalog) {\r\n routingStore.push(\"/\")\r\n catalogStore.setBusinessAreaQuery({});\r\n catalogStore.setBrandQuery({});\r\n catalogStore.setTurbineQuery({});\r\n catalogStore.setModelQuery({});\r\n catalogStore.setSbuQuery({});\r\n catalogStore.setCountryQuery({});\r\n catalogStore.setDevelopmentStageQuery({});\r\n }\r\n }}>\r\n
\r\n \r\n searchStore.setSearchString(e.target.value)} />\r\n \r\n
\r\n
;\r\n\r\n});","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { SearchBar } from './SearchBar';\r\nimport { useStores } from '../hooks/UseStores';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport const SiteHeader = observer(() => {\r\n const { userStore, catalogStore, searchStore } = useStores();\r\n \r\n return
\r\n
\r\n
\r\n \r\n

{\r\n catalogStore.resetQueries();\r\n searchStore.setSearchString(\"\");\r\n }}>\r\n Service Products Catalogue\r\n

\r\n \r\n\r\n \r\n\r\n
\r\n \r\n {userStore.fullName}\r\n
\r\n
\r\n
\r\n
\r\n\r\n});","import * as React from 'react';\r\n\r\nexport const Error = () => {\r\n\r\n return
\r\n
\r\n

Something went wrong.. please try to reload the page.

\r\n
\r\n
\r\n};","import { useEffect } from 'react'\r\nimport { observer } from 'mobx-react';\r\nimport { autorun } from 'mobx';\r\nimport { useStores } from '../hooks/UseStores'\r\n\r\nexport const PageTracker = observer(() => {\r\n const { detailsStore, routingStore } = useStores();\r\n\r\n\r\n // Track page view through Goggle Tag Manager dataLayer\r\n useEffect(() => autorun(() => {\r\n const { location } = routingStore.history;\r\n const { serviceInfoData, details } = detailsStore;\r\n\r\n if (location.pathname.startsWith('/service/')) {\r\n // For service details, only track when the serivce data have been loaded\r\n if(serviceInfoData.sapMaterialID) {\r\n // Map details to format that is expected by GTM\r\n const detailsObject = details && details.map(item => {\r\n return { [item.name]: item.value };\r\n });\r\n\r\n // Track in GTM\r\n window.dataLayer.push({\r\n event: 'virtualPageview',\r\n location: window.location.href,\r\n pageUri: location.pathname,\r\n vestasSapMaterialId: serviceInfoData.sapMaterialID,\r\n vestasProductName: serviceInfoData.name,\r\n vestasAdditionalData: detailsObject\r\n });\r\n }\r\n } else {\r\n // Other pages can just be tracked as we don't need to enrich them\r\n window.dataLayer.push({\r\n event: 'virtualPageview',\r\n location: window.location.href,\r\n pageUri: location.pathname,\r\n vestasSapMaterialId: undefined,\r\n vestasProductName: undefined,\r\n vestasAdditionalData: undefined\r\n });\r\n }\r\n }));\r\n\r\n return null;\r\n});\r\n","import * as React from 'react';\r\nimport { Router, Switch, Route, useParams } from \"react-router-dom\";\r\nimport { Catalog } from './pages/catalog';\r\nimport { Details } from './pages/details';\r\nimport { observer } from 'mobx-react';\r\nimport { history } from './contexts/';\r\nimport { SiteHeader } from './components/SiteHeader';\r\nimport { useStores } from './hooks/UseStores';\r\nimport { Error } from './components/Error';\r\nimport { PageTracker } from './components/PageTracker';\r\nimport { useEffect } from 'react';\r\n\r\ndeclare global {\r\n interface Window {\r\n dataLayer: any;\r\n }\r\n}\r\n\r\nwindow.dataLayer = window.dataLayer || [];\r\n\r\nexport const App = observer(() => {\r\n const { detailsStore, modelStore, searchStore, catalogStore } = useStores();\r\n const error = detailsStore.error || modelStore.error || searchStore.error || catalogStore.error;\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n {error && }\r\n {!error &&\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n }\r\n);\r\n\r\nconst SetDetailsId = () => {\r\n const { id } = useParams();\r\n const { detailsStore } = useStores();\r\n\r\n useEffect(() => {\r\n\r\n detailsStore.setEntityId(id);\r\n });\r\n\r\n\r\n return null;\r\n};\r\n","\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { App } from './App';\r\nimport './styles/style.generated.css';\r\n\r\nReactDOM.render(\r\n\r\n \r\n \r\n ,\r\n document.getElementById('mainApp') as HTMLElement\r\n);\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { AuthenticationContext, AdalConfig } from 'react-adal';\r\n\r\nfunction getClientId(uri: string): string {\r\n\r\n if (uri.indexOf('t-serviceproducts') !== -1 || uri.indexOf('app-pim-spc-test-vestas') !== -1) {\r\n return '72c3edcf-7b96-4a5c-9fde-1d2e60db7dde';\r\n }\r\n else if (uri.indexOf('d-serviceproducts') !== -1 || uri.indexOf('app-pim-spc-dev-vestas') !== -1 || uri.indexOf('localhost') !== -1) {\r\n return 'a9da335a-819e-47b2-b5f0-4b17589bd4eb';\r\n }\r\n else {\r\n return 'e267bc31-0f3f-456e-a2b2-1bdf0e229fc6';\r\n }\r\n}\r\n\r\nfunction redirectUriCombined(): string {\r\n\r\n return window.location.protocol + '//' + window.location.host + '/';\r\n\r\n}\r\n\r\n\r\nconst adalConfig = {\r\n tenant: 'vestas.onmicrosoft.com',\r\n redirectUri: redirectUriCombined(),\r\n clientId: getClientId(window.location.host),\r\n endpoints: {\r\n api: 'https://login.microsoftonline.com/c0701940-7b3f-4116-a59f-159078bc3c63'\r\n },\r\n cacheLocation: 'sessionStorage'\r\n};\r\n\r\nexport const authContext = new AuthenticationContext(adalConfig);\r\n\r\nexport const getToken = () => authContext.getCachedToken(adalConfig.clientId);\r\n\r\n\r\nexport function requestWithToken(func: (error, token) => void): void {\r\n authContext.acquireToken(adalConfig.clientId, func);\r\n}","\r\nimport { runWithAdal } from 'react-adal';\r\nimport { authContext } from './adalConfig';\r\n\r\n\r\nconst DO_NOT_LOGIN = false;\r\n\r\nrunWithAdal(\r\n authContext,\r\n () => { require('./indexApp'); },\r\n DO_NOT_LOGIN\r\n);\r\n\r\n\r\n\r\n\r\n\r\n\r\n"],"sourceRoot":""}