55 * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66 */
77
8- import { Flexipage , FlexiComponentInstanceProperty } from '../../migration/interfaces' ;
8+ import { DuplicateKeyError , KeyNotFoundInStorageError , TargetPropertyNotFoundError } from '../../error/errorInterfaces' ;
9+ import {
10+ Flexipage ,
11+ FlexiComponentInstanceProperty ,
12+ OmniScriptStorage ,
13+ FlexcardStorage ,
14+ } from '../../migration/interfaces' ;
15+ import { StorageUtil } from '../storageUtil' ;
916
1017/** Attributes to remove during transformation */
1118const attrsToRemove = [ 'target' ] ;
1219
1320/** Component name to look for during transformation */
1421const lookupComponentName = 'vlocityLWCOmniWrapper' ;
1522/** Target component name after transformation */
16- const targetComponentName = 'runtime_omnistudio:omniscript' ;
23+ const targetComponentNameOS = 'runtime_omnistudio:omniscript' ;
1724/** Target identifier after transformation */
18- const targetIdentifier = 'runtime_omnistudio_omniscript' ;
25+ const targetIdentifierOS = 'runtime_omnistudio_omniscript' ;
26+
27+ const targetComponentNameFlexCard = 'runtime_omnistudio:flexcard' ;
28+ const targetIdentifierFlexCard = 'runtime_omnistudio_flexcard' ;
29+
30+ const flexCardPrefix = 'cf' ;
1931
2032/**
2133 * Transforms a Flexipage bundle by replacing vlocityLWCOmniWrapper components
@@ -32,7 +44,11 @@ const targetIdentifier = 'runtime_omnistudio_omniscript';
3244 * @returns The transformed Flexipage bundle if changes were made, or false if no changes were needed
3345 * @throws Error if the 'target' property is not found for a component
3446 */
35- export function transformFlexipageBundle ( ogBundle : Flexipage , namespace : string ) : Flexipage | boolean {
47+ export function transformFlexipageBundle (
48+ ogBundle : Flexipage ,
49+ namespace : string ,
50+ mode : 'assess' | 'migrate'
51+ ) : Flexipage | boolean {
3652 const bundle : Flexipage = JSON . parse ( JSON . stringify ( ogBundle ) ) as Flexipage ;
3753 let changes = false ;
3854
@@ -62,9 +78,13 @@ export function transformFlexipageBundle(ogBundle: Flexipage, namespace: string)
6278 ( prop ) => prop . name === 'target'
6379 ) ?. value ;
6480 if ( ! typeSubtypeLanguage ) {
65- throw new Error ( 'target property not found for component ' + item . componentInstance . componentName ) ;
81+ throw new TargetPropertyNotFoundError ( item . componentInstance . componentName ) ;
6682 }
67- const newProps = createNewProps ( typeSubtypeLanguage ) ;
83+ const newProps = createNewProps ( typeSubtypeLanguage . split ( ':' ) [ 1 ] , namespace , mode ) ;
84+ const targetComponentName = newProps . componentName ;
85+ const targetIdentifier = newProps . identifier ;
86+ delete newProps . componentName ;
87+ delete newProps . identifier ;
6888 const leftProps = item . componentInstance . componentInstanceProperties ?. filter ?.( propRemover ) ?? [ ] ;
6989 const replacedProps = [
7090 ...leftProps ,
@@ -88,11 +108,77 @@ export function transformFlexipageBundle(ogBundle: Flexipage, namespace: string)
88108 * @returns Object containing the new properties for the transformed component
89109 */
90110// eslint-disable-next-line @typescript-eslint/no-unused-vars
91- function createNewProps ( _property : string ) : Record < string , string > {
111+ function createNewProps ( nameKey : string , namespace : string , mode : 'assess' | 'migrate' ) : Record < string , string > {
112+ if ( nameKey . startsWith ( flexCardPrefix ) ) {
113+ return createNewPropsForFlexCard ( nameKey . substring ( flexCardPrefix . length ) , namespace , mode ) ;
114+ }
115+ return createNewPropsForOmniScript ( nameKey , namespace , mode ) ;
116+ // return {
117+ // language: 'English',
118+ // subType: 'OSForCustomLWC',
119+ // theme: 'lightning',
120+ // type: 'OSForCustomLWC',
121+ // };
122+ }
123+
124+ function createNewPropsForOmniScript (
125+ nameKey : string ,
126+ namespace : string ,
127+ mode : 'assess' | 'migrate'
128+ ) : Record < string , string > {
129+ let migratedScriptName : OmniScriptStorage ;
130+ if ( mode === 'assess' ) {
131+ migratedScriptName = StorageUtil . getOmnistudioAssessmentStorage ( ) . osStorage . get ( nameKey ) ;
132+ } else {
133+ migratedScriptName = StorageUtil . getOmnistudioMigrationStorage ( ) . osStorage . get ( nameKey ) ;
134+ }
135+
136+ if ( ! migratedScriptName ) {
137+ throw new KeyNotFoundInStorageError ( nameKey , 'OmniScript' ) ;
138+ }
139+
140+ if ( migratedScriptName . isDuplicate ) {
141+ throw new DuplicateKeyError ( nameKey , 'OmniScript' ) ;
142+ }
143+
144+ return {
145+ componentName : targetComponentNameOS ,
146+ identifier : targetIdentifierOS ,
147+ language : migratedScriptName . language || 'English' ,
148+ subType : migratedScriptName . subtype ,
149+ type : migratedScriptName . type ,
150+ theme : 'OSForCustomLWC' ,
151+ direction : 'ltr' ,
152+ display : 'Display button to open Omniscript' ,
153+ inlineVariant : 'brand' ,
154+ } ;
155+ }
156+
157+ function createNewPropsForFlexCard (
158+ nameKey : string ,
159+ namespace : string ,
160+ mode : 'assess' | 'migrate'
161+ ) : Record < string , string > {
162+ let migratedCardName : FlexcardStorage ;
163+ if ( mode === 'assess' ) {
164+ migratedCardName = StorageUtil . getOmnistudioAssessmentStorage ( ) . fcStorage . get ( nameKey ) ;
165+ } else {
166+ migratedCardName = StorageUtil . getOmnistudioMigrationStorage ( ) . fcStorage . get ( nameKey ) ;
167+ }
168+
169+ if ( ! migratedCardName ) {
170+ throw new KeyNotFoundInStorageError ( nameKey , 'Flexcard' ) ;
171+ }
172+
173+ if ( migratedCardName . isDuplicate ) {
174+ throw new DuplicateKeyError ( nameKey , 'Flexcard' ) ;
175+ }
176+
92177 return {
93- language : 'English' ,
94- subType : 'OSForCustomLWC' ,
95- theme : 'lightning' ,
96- type : 'OSForCustomLWC' ,
178+ componentName : targetComponentNameFlexCard ,
179+ identifier : targetIdentifierFlexCard ,
180+ flexcardName : migratedCardName . name ,
181+ objectApiName : '{!objectApiName}' ,
182+ recordId : '{!recordId}' ,
97183 } ;
98184}
0 commit comments