88 lines
3.2 KiB
JavaScript
88 lines
3.2 KiB
JavaScript
(function attachBackgroundRegistrationEmailState(root, factory) {
|
|
root.MultiPageRegistrationEmailState = factory();
|
|
})(typeof self !== 'undefined' ? self : globalThis, function createBackgroundRegistrationEmailStateModule() {
|
|
const DEFAULT_REGISTRATION_EMAIL_STATE = Object.freeze({
|
|
current: '',
|
|
previous: '',
|
|
source: '',
|
|
updatedAt: 0,
|
|
});
|
|
|
|
function createRegistrationEmailStateHelpers() {
|
|
function normalizeEmailValue(value) {
|
|
return String(value || '').trim();
|
|
}
|
|
|
|
function cloneDefaultRegistrationEmailState() {
|
|
return {
|
|
current: DEFAULT_REGISTRATION_EMAIL_STATE.current,
|
|
previous: DEFAULT_REGISTRATION_EMAIL_STATE.previous,
|
|
source: DEFAULT_REGISTRATION_EMAIL_STATE.source,
|
|
updatedAt: DEFAULT_REGISTRATION_EMAIL_STATE.updatedAt,
|
|
};
|
|
}
|
|
|
|
function normalizeRegistrationEmailState(value, fallbackEmail = '') {
|
|
const fallback = normalizeEmailValue(fallbackEmail);
|
|
const candidate = value && typeof value === 'object' && !Array.isArray(value)
|
|
? value
|
|
: null;
|
|
const current = normalizeEmailValue(candidate?.current || fallback);
|
|
const previous = normalizeEmailValue(candidate?.previous || current || fallback);
|
|
const source = String(candidate?.source || '').trim();
|
|
const updatedAt = Number(candidate?.updatedAt) || 0;
|
|
return {
|
|
current,
|
|
previous,
|
|
source,
|
|
updatedAt: updatedAt > 0 ? updatedAt : 0,
|
|
};
|
|
}
|
|
|
|
function getRegistrationEmailState(state = {}) {
|
|
return normalizeRegistrationEmailState(state?.registrationEmailState, state?.email);
|
|
}
|
|
|
|
function buildRegistrationEmailStateUpdates(state = {}, options = {}) {
|
|
const currentState = getRegistrationEmailState(state);
|
|
const currentEmail = normalizeEmailValue(options.currentEmail);
|
|
const preservePrevious = Boolean(options.preservePrevious);
|
|
const source = String(options.source || '').trim();
|
|
const nextState = cloneDefaultRegistrationEmailState();
|
|
|
|
nextState.current = currentEmail;
|
|
nextState.previous = currentEmail || (preservePrevious ? currentState.previous : '');
|
|
nextState.source = currentEmail
|
|
? (source || currentState.source)
|
|
: (preservePrevious ? currentState.source : '');
|
|
nextState.updatedAt = currentEmail || (preservePrevious && currentState.previous)
|
|
? Date.now()
|
|
: 0;
|
|
|
|
return {
|
|
email: currentEmail || null,
|
|
registrationEmailState: nextState,
|
|
};
|
|
}
|
|
|
|
function getRegistrationEmailBaseline(state = {}, options = {}) {
|
|
const currentState = getRegistrationEmailState(state);
|
|
const preferredEmail = normalizeEmailValue(options.preferredEmail);
|
|
const fallbackEmail = normalizeEmailValue(options.fallbackEmail);
|
|
return preferredEmail || currentState.current || currentState.previous || fallbackEmail || '';
|
|
}
|
|
|
|
return {
|
|
DEFAULT_REGISTRATION_EMAIL_STATE: cloneDefaultRegistrationEmailState(),
|
|
buildRegistrationEmailStateUpdates,
|
|
getRegistrationEmailBaseline,
|
|
getRegistrationEmailState,
|
|
normalizeRegistrationEmailState,
|
|
};
|
|
}
|
|
|
|
return {
|
|
createRegistrationEmailStateHelpers,
|
|
};
|
|
});
|