@cmdap/ng-wizard
Version:
A simple wizard/stepper component for Angular 9 utilizing Angular Routing for navigation.
107 lines • 11.4 kB
JavaScript
/**
* Returns true if the component extends the NgWizardStep class or implements the NgWizardStepInterface.
*
* @param componentRef The reference to the component to verify
*/
export function componentImplementsNgWizardStepInterface(componentRef) {
return 'wsIsValid' in componentRef && 'wsOnNext' in componentRef && 'wsOnPrevious' in componentRef;
}
/**
* Returns the NgWizardStepData with the given path in the stepData list or undefined if none is
* found.
*
* @param stepData The list with NgWizardStepDatas
* @param path The path you want to get the NgWizardStepData for
*/
export function getStepDataForPath(stepData, path) {
return stepData.find(data => data.path === path);
}
/**
* Returns the NgWizardStepData for the given url in the stepData list or undefined if none is
* found.
*
* @param stepData The list with NgWizardStepDatas
* @param url The url which you want to get the NgWizardStepData for
*/
export function getStepDataForUrl(stepData, url) {
// gets 'path' in the url '/wizard/path?key=value'
const path = url.split('/').pop().split('?')[0];
return getStepDataForPath(stepData, path);
}
/**
* Returns the default wizard options.
*/
export function getDefaultWizardOptions() {
return {
name: '',
navBar: {
icons: {
previous: '<i class="material-icons ng-wizard-icon">done</i>',
current: '<i class="material-icons ng-wizard-icon">create</i>',
next: '<i class="material-icons ng-wizard-icon">lock</i>',
},
},
buttons: {
previous: {
label: '<i class="material-icons ng-wizard-icon">chevron_left</i> Previous',
},
next: {
label: 'Next <i class="material-icons ng-wizard-icon">chevron_right</i>',
},
}
};
}
/**
* Merges the wizard options in the wizard route's config with the default wizard options.
*
* @param wizardOptions The wizard options in the wizard route's config
*/
export function mergeWizardOptions(wizardOptions) {
if (!wizardOptions) {
return getDefaultWizardOptions();
}
return Object.assign(Object.assign({}, getDefaultWizardOptions()), wizardOptions);
}
/**
* Returns the options passed to the wizard step route with an added title attribute.
*
* @param route The wizard step route configuration
*/
export function getWizardStepOptions(route) {
if (!route.data) {
return { title: getStepTitleFromRoute(route) };
}
return Object.assign(Object.assign({}, route.data), { title: getStepTitleFromRoute(route) });
}
/**
* Returns the step title based on the Route configuration.
* If the route has a data.title attribute it will be returned.
* Else the path will be capitalized and '-' or '_' characters will be replaces by spaces.
*
* @param route The Angular Route object
*/
export function getStepTitleFromRoute(route) {
if (route.data && route.data.title) {
return route.data.title;
}
return capitalize(insertSpaces(route.path));
}
/**
* Capitalizes the first character of the passed value.
*/
function capitalize(value) {
if (!value) {
return value;
}
return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
}
/**
* Replaces '-' and '_' characters by spaces.
*/
function insertSpaces(value) {
if (!value) {
return value;
}
return value.replace(/[-_]/g, ' ').trim();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctd2l6YXJkLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctd2l6YXJkL3NyYy9saWIvbmctd2l6YXJkLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0NBQXdDLENBQUMsWUFBK0I7SUFDdEYsT0FBTyxXQUFXLElBQUksWUFBWSxJQUFJLFVBQVUsSUFBSSxZQUFZLElBQUksY0FBYyxJQUFJLFlBQVksQ0FBQztBQUNyRyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQTRCLEVBQUUsSUFBWTtJQUMzRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBNEIsRUFBRSxHQUFXO0lBQ3pFLGtEQUFrRDtJQUNsRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU87UUFDTCxJQUFJLEVBQUUsRUFBRTtRQUNSLE1BQU0sRUFBRTtZQUNOLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUUsbURBQW1EO2dCQUM3RCxPQUFPLEVBQUUscURBQXFEO2dCQUM5RCxJQUFJLEVBQUUsbURBQW1EO2FBQzFEO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUCxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLG9FQUFvRTthQUM1RTtZQUNELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsaUVBQWlFO2FBQ3pFO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsYUFBaUI7SUFDbEQsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNsQixPQUFPLHVCQUF1QixFQUFFLENBQUM7S0FDbEM7SUFFRCx1Q0FBWSx1QkFBdUIsRUFBRSxHQUFLLGFBQWEsRUFBRztBQUM1RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUFZO0lBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0tBQ2hEO0lBRUQsdUNBQ0ssS0FBSyxDQUFDLElBQUksS0FDYixLQUFLLEVBQUUscUJBQXFCLENBQUMsS0FBSyxDQUFDLElBQ25DO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFZO0lBQ2hELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNsQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ1dpemFyZFN0ZXBEYXRhIH0gZnJvbSAnLi9uZy13aXphcmQtc3RlcC9uZy13aXphcmQtc3RlcC1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ1dpemFyZE9wdGlvbnMgfSBmcm9tICcuL25nLXdpemFyZC1vcHRpb25zL25nLXdpemFyZC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ1dpemFyZFN0ZXBPcHRpb25zIH0gZnJvbSAnLi9uZy13aXphcmQtc3RlcC9uZy13aXphcmQtc3RlcC1vcHRpb25zJztcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBvbmVudCBleHRlbmRzIHRoZSBOZ1dpemFyZFN0ZXAgY2xhc3Mgb3IgaW1wbGVtZW50cyB0aGUgTmdXaXphcmRTdGVwSW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBjb21wb25lbnRSZWYgVGhlIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IHRvIHZlcmlmeVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9uZW50SW1wbGVtZW50c05nV2l6YXJkU3RlcEludGVyZmFjZShjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+KTogYm9vbGVhbiB7XG4gIHJldHVybiAnd3NJc1ZhbGlkJyBpbiBjb21wb25lbnRSZWYgJiYgJ3dzT25OZXh0JyBpbiBjb21wb25lbnRSZWYgJiYgJ3dzT25QcmV2aW91cycgaW4gY29tcG9uZW50UmVmO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIE5nV2l6YXJkU3RlcERhdGEgd2l0aCB0aGUgZ2l2ZW4gcGF0aCBpbiB0aGUgc3RlcERhdGEgbGlzdCBvciB1bmRlZmluZWQgaWYgbm9uZSBpc1xuICogZm91bmQuXG4gKlxuICogQHBhcmFtIHN0ZXBEYXRhIFRoZSBsaXN0IHdpdGggTmdXaXphcmRTdGVwRGF0YXNcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHlvdSB3YW50IHRvIGdldCB0aGUgTmdXaXphcmRTdGVwRGF0YSBmb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBEYXRhRm9yUGF0aChzdGVwRGF0YTogTmdXaXphcmRTdGVwRGF0YVtdLCBwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ZXBEYXRhLmZpbmQoZGF0YSA9PiBkYXRhLnBhdGggPT09IHBhdGgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIE5nV2l6YXJkU3RlcERhdGEgZm9yIHRoZSBnaXZlbiB1cmwgaW4gdGhlIHN0ZXBEYXRhIGxpc3Qgb3IgdW5kZWZpbmVkIGlmIG5vbmUgaXNcbiAqIGZvdW5kLlxuICpcbiAqIEBwYXJhbSBzdGVwRGF0YSBUaGUgbGlzdCB3aXRoIE5nV2l6YXJkU3RlcERhdGFzXG4gKiBAcGFyYW0gdXJsIFRoZSB1cmwgd2hpY2ggeW91IHdhbnQgdG8gZ2V0IHRoZSBOZ1dpemFyZFN0ZXBEYXRhIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RlcERhdGFGb3JVcmwoc3RlcERhdGE6IE5nV2l6YXJkU3RlcERhdGFbXSwgdXJsOiBzdHJpbmcpIHtcbiAgLy8gZ2V0cyAncGF0aCcgaW4gdGhlIHVybCAnL3dpemFyZC9wYXRoP2tleT12YWx1ZSdcbiAgY29uc3QgcGF0aCA9IHVybC5zcGxpdCgnLycpLnBvcCgpLnNwbGl0KCc/JylbMF07XG4gIHJldHVybiBnZXRTdGVwRGF0YUZvclBhdGgoc3RlcERhdGEsIHBhdGgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgd2l6YXJkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0V2l6YXJkT3B0aW9ucygpOiBOZ1dpemFyZE9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICcnLFxuICAgIG5hdkJhcjoge1xuICAgICAgaWNvbnM6IHtcbiAgICAgICAgcHJldmlvdXM6ICc8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG5nLXdpemFyZC1pY29uXCI+ZG9uZTwvaT4nLFxuICAgICAgICBjdXJyZW50OiAnPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZy13aXphcmQtaWNvblwiPmNyZWF0ZTwvaT4nLFxuICAgICAgICBuZXh0OiAnPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZy13aXphcmQtaWNvblwiPmxvY2s8L2k+JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBidXR0b25zOiB7XG4gICAgICBwcmV2aW91czoge1xuICAgICAgICBsYWJlbDogJzxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbmctd2l6YXJkLWljb25cIj5jaGV2cm9uX2xlZnQ8L2k+IFByZXZpb3VzJyxcbiAgICAgIH0sXG4gICAgICBuZXh0OiB7XG4gICAgICAgIGxhYmVsOiAnTmV4dCA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG5nLXdpemFyZC1pY29uXCI+Y2hldnJvbl9yaWdodDwvaT4nLFxuICAgICAgfSxcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2VzIHRoZSB3aXphcmQgb3B0aW9ucyBpbiB0aGUgd2l6YXJkIHJvdXRlJ3MgY29uZmlnIHdpdGggdGhlIGRlZmF1bHQgd2l6YXJkIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHdpemFyZE9wdGlvbnMgVGhlIHdpemFyZCBvcHRpb25zIGluIHRoZSB3aXphcmQgcm91dGUncyBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlV2l6YXJkT3B0aW9ucyh3aXphcmRPcHRpb25zOiB7fSk6IE5nV2l6YXJkT3B0aW9ucyB7XG4gIGlmICghd2l6YXJkT3B0aW9ucykge1xuICAgIHJldHVybiBnZXREZWZhdWx0V2l6YXJkT3B0aW9ucygpO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4uZ2V0RGVmYXVsdFdpemFyZE9wdGlvbnMoKSwgLi4ud2l6YXJkT3B0aW9ucyB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSB3aXphcmQgc3RlcCByb3V0ZSB3aXRoIGFuIGFkZGVkIHRpdGxlIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gcm91dGUgVGhlIHdpemFyZCBzdGVwIHJvdXRlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdpemFyZFN0ZXBPcHRpb25zKHJvdXRlOiBSb3V0ZSk6IE5nV2l6YXJkU3RlcE9wdGlvbnMge1xuICBpZiAoIXJvdXRlLmRhdGEpIHtcbiAgICByZXR1cm4geyB0aXRsZTogZ2V0U3RlcFRpdGxlRnJvbVJvdXRlKHJvdXRlKSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yb3V0ZS5kYXRhLFxuICAgIHRpdGxlOiBnZXRTdGVwVGl0bGVGcm9tUm91dGUocm91dGUpLFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0ZXAgdGl0bGUgYmFzZWQgb24gdGhlIFJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKiBJZiB0aGUgcm91dGUgaGFzIGEgZGF0YS50aXRsZSBhdHRyaWJ1dGUgaXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEVsc2UgdGhlIHBhdGggd2lsbCBiZSBjYXBpdGFsaXplZCBhbmQgJy0nIG9yICdfJyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZXMgYnkgc3BhY2VzLlxuICpcbiAqIEBwYXJhbSByb3V0ZSBUaGUgQW5ndWxhciBSb3V0ZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBUaXRsZUZyb21Sb3V0ZShyb3V0ZTogUm91dGUpOiBzdHJpbmcge1xuICBpZiAocm91dGUuZGF0YSAmJiByb3V0ZS5kYXRhLnRpdGxlKSB7XG4gICAgcmV0dXJuIHJvdXRlLmRhdGEudGl0bGU7XG4gIH1cbiAgcmV0dXJuIGNhcGl0YWxpemUoaW5zZXJ0U3BhY2VzKHJvdXRlLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBDYXBpdGFsaXplcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwYXNzZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGNhcGl0YWxpemUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyAnLScgYW5kICdfJyBjaGFyYWN0ZXJzIGJ5IHNwYWNlcy5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0U3BhY2VzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLV9dL2csICcgJykudHJpbSgpO1xufVxuIl19