|
| 1 | +/* |
| 2 | + * Copyright (c) 2025 Ping Identity Corporation. All rights reserved. |
| 3 | + * |
| 4 | + * This software may be modified and distributed under the terms |
| 5 | + * of the MIT license. See the LICENSE file for details. |
| 6 | + */ |
| 7 | + |
| 8 | +import type { |
| 9 | + AttributeInputCallback, |
| 10 | + BaseCallback, |
| 11 | + ChoiceCallback, |
| 12 | + ConfirmationCallback, |
| 13 | + DeviceProfileCallback, |
| 14 | + HiddenValueCallback, |
| 15 | + KbaCreateCallback, |
| 16 | + MetadataCallback, |
| 17 | + NameCallback, |
| 18 | + PasswordCallback, |
| 19 | + PingOneProtectEvaluationCallback, |
| 20 | + PingOneProtectInitializeCallback, |
| 21 | + PollingWaitCallback, |
| 22 | + ReCaptchaCallback, |
| 23 | + ReCaptchaEnterpriseCallback, |
| 24 | + RedirectCallback, |
| 25 | + SelectIdPCallback, |
| 26 | + SuspendedTextOutputCallback, |
| 27 | + TermsAndConditionsCallback, |
| 28 | + TextInputCallback, |
| 29 | + TextOutputCallback, |
| 30 | + ValidatedCreatePasswordCallback, |
| 31 | + ValidatedCreateUsernameCallback, |
| 32 | +} from '@forgerock/journey-client/types'; |
| 33 | + |
| 34 | +import { |
| 35 | + attributeInputComponent, |
| 36 | + choiceComponent, |
| 37 | + confirmationComponent, |
| 38 | + deviceProfileComponent, |
| 39 | + hiddenValueComponent, |
| 40 | + kbaCreateComponent, |
| 41 | + metadataComponent, |
| 42 | + passwordComponent, |
| 43 | + pingProtectEvaluationComponent, |
| 44 | + pingProtectInitializeComponent, |
| 45 | + pollingWaitComponent, |
| 46 | + recaptchaComponent, |
| 47 | + recaptchaEnterpriseComponent, |
| 48 | + redirectComponent, |
| 49 | + selectIdpComponent, |
| 50 | + suspendedTextOutputComponent, |
| 51 | + termsAndConditionsComponent, |
| 52 | + textInputComponent, |
| 53 | + textOutputComponent, |
| 54 | + validatedPasswordComponent, |
| 55 | + validatedUsernameComponent, |
| 56 | +} from './components/index.js'; |
| 57 | + |
| 58 | +/** |
| 59 | + * Renders a callback component based on its type |
| 60 | + * @param journeyEl - The container element to append the component to |
| 61 | + * @param callback - The callback instance |
| 62 | + * @param idx - Index for generating unique IDs |
| 63 | + */ |
| 64 | +export function renderCallback( |
| 65 | + journeyEl: HTMLDivElement, |
| 66 | + callback: BaseCallback, |
| 67 | + idx: number, |
| 68 | +): void { |
| 69 | + switch (callback.getType()) { |
| 70 | + case 'BooleanAttributeInputCallback': |
| 71 | + case 'NumberAttributeInputCallback': |
| 72 | + case 'StringAttributeInputCallback': |
| 73 | + attributeInputComponent( |
| 74 | + journeyEl, |
| 75 | + callback as AttributeInputCallback<string | number | boolean>, |
| 76 | + idx, |
| 77 | + ); |
| 78 | + break; |
| 79 | + case 'ChoiceCallback': |
| 80 | + choiceComponent(journeyEl, callback as ChoiceCallback, idx); |
| 81 | + break; |
| 82 | + case 'ConfirmationCallback': |
| 83 | + confirmationComponent(journeyEl, callback as ConfirmationCallback, idx); |
| 84 | + break; |
| 85 | + case 'DeviceProfileCallback': |
| 86 | + deviceProfileComponent(journeyEl, callback as DeviceProfileCallback, idx); |
| 87 | + break; |
| 88 | + case 'HiddenValueCallback': |
| 89 | + hiddenValueComponent(journeyEl, callback as HiddenValueCallback, idx); |
| 90 | + break; |
| 91 | + case 'KbaCreateCallback': |
| 92 | + kbaCreateComponent(journeyEl, callback as KbaCreateCallback, idx); |
| 93 | + break; |
| 94 | + case 'MetadataCallback': |
| 95 | + metadataComponent(journeyEl, callback as MetadataCallback, idx); |
| 96 | + break; |
| 97 | + case 'NameCallback': |
| 98 | + textInputComponent(journeyEl, callback as NameCallback, idx); |
| 99 | + break; |
| 100 | + case 'PasswordCallback': |
| 101 | + passwordComponent(journeyEl, callback as PasswordCallback, idx); |
| 102 | + break; |
| 103 | + case 'PingOneProtectEvaluationCallback': |
| 104 | + pingProtectEvaluationComponent(journeyEl, callback as PingOneProtectEvaluationCallback, idx); |
| 105 | + break; |
| 106 | + case 'PingOneProtectInitializeCallback': |
| 107 | + pingProtectInitializeComponent(journeyEl, callback as PingOneProtectInitializeCallback, idx); |
| 108 | + break; |
| 109 | + case 'PollingWaitCallback': |
| 110 | + pollingWaitComponent(journeyEl, callback as PollingWaitCallback, idx); |
| 111 | + break; |
| 112 | + case 'ReCaptchaCallback': |
| 113 | + recaptchaComponent(journeyEl, callback as ReCaptchaCallback, idx); |
| 114 | + break; |
| 115 | + case 'ReCaptchaEnterpriseCallback': |
| 116 | + recaptchaEnterpriseComponent(journeyEl, callback as ReCaptchaEnterpriseCallback, idx); |
| 117 | + break; |
| 118 | + case 'RedirectCallback': |
| 119 | + redirectComponent(journeyEl, callback as RedirectCallback, idx); |
| 120 | + break; |
| 121 | + case 'SelectIdPCallback': |
| 122 | + selectIdpComponent(journeyEl, callback as SelectIdPCallback, idx); |
| 123 | + break; |
| 124 | + case 'SuspendedTextOutputCallback': |
| 125 | + suspendedTextOutputComponent(journeyEl, callback as SuspendedTextOutputCallback, idx); |
| 126 | + break; |
| 127 | + case 'TermsAndConditionsCallback': |
| 128 | + termsAndConditionsComponent(journeyEl, callback as TermsAndConditionsCallback, idx); |
| 129 | + break; |
| 130 | + case 'TextInputCallback': |
| 131 | + textInputComponent(journeyEl, callback as TextInputCallback, idx); |
| 132 | + break; |
| 133 | + case 'TextOutputCallback': |
| 134 | + textOutputComponent(journeyEl, callback as TextOutputCallback, idx); |
| 135 | + break; |
| 136 | + case 'ValidatedCreatePasswordCallback': |
| 137 | + validatedPasswordComponent(journeyEl, callback as ValidatedCreatePasswordCallback, idx); |
| 138 | + break; |
| 139 | + case 'ValidatedCreateUsernameCallback': |
| 140 | + validatedUsernameComponent(journeyEl, callback as ValidatedCreateUsernameCallback, idx); |
| 141 | + break; |
| 142 | + default: |
| 143 | + console.warn(`Unknown callback type: ${callback.getType()}`); |
| 144 | + break; |
| 145 | + } |
| 146 | +} |
| 147 | + |
| 148 | +/** |
| 149 | + * Renders all callbacks in a step |
| 150 | + * @param journeyEl - The container element to append components to |
| 151 | + * @param callbacks - Array of callback instances |
| 152 | + */ |
| 153 | +export function renderCallbacks(journeyEl: HTMLDivElement, callbacks: BaseCallback[]): void { |
| 154 | + callbacks.forEach((callback, idx) => { |
| 155 | + renderCallback(journeyEl, callback, idx); |
| 156 | + }); |
| 157 | +} |
0 commit comments