import 'number-to-text/converters/en-us';
import { convertToText } from 'number-to-text/index';
import { isFunction } from './isType';
const getLinks = elem => $(elem).find('.link').map((i, el) => {
const link = $(el);
// toggleValidations(link);
const linkVal = link.find('input[name="link_link"]').val();
const textVal = link.find('input[name="link_text"]').val();
if (linkVal || textVal) {
return { link: linkVal, text: textVal };
}
// If linkVal and textVal are empty trigger delete handler
link.find('.delete').first().trigger('click');
return undefined;
}).get();
/*
* Iterates through any links class found and for each one found,
* executes the function cb by passing two parameters: the data-context value
* and value param being an Array of link objects (e.g. [{ link: String, text: String }, ...])
* that represent the values for the input texts introduced.
*/
export const eachLinks = (cb) => {
if (isFunction(cb)) {
$('.links').each((i, el) => {
cb($(el).attr('data-context'), getLinks(el));
});
}
return eachLinks;
};
eachLinks.done = (cb) => {
if (isFunction(cb)) {
cb();
}
};
$(() => {
const regExp = /([^\d]*)(\d)+/;
const replacer = (match, p1, p2) => `${p1}${(p2 * 1) + 1}`;
const replacerFor = (i, el) => $(el).attr('for', $(el).attr('for').replace(regExp, replacer));
const replacerId = (i, el) => $(el).attr('id', $(el).attr('id').replace(regExp, replacer));
const changeIds = (jqueryElem) => {
jqueryElem.find('label').each(replacerFor);
jqueryElem.find('input[type="text"]').each(replacerId);
};
const clearVals = (jqueryElem) => {
jqueryElem.find('input[type="text"]').each((i, el) => {
$(el).val('');
});
};
const linksLength = jqueryElem => jqueryElem.closest('.links').find('.link').length;
const maxNumberLinks = jqueryElem => jqueryElem.closest('.links').attr('data-max-number-links') * 1;
$('.links').on('click', '.new', (e) => {
e.preventDefault();
const target = $(e.target);
const max = maxNumberLinks(target);
const nbrLinks = linksLength(target);
if (nbrLinks < max) {
const lastLink = target.closest('.links').find('.link').last();
const clonedLink = lastLink.clone();
changeIds(clonedLink);
clearVals(clonedLink);
lastLink.after(clonedLink);
// Hide the add link if we have now reached the limit
if (nbrLinks + 1 >= max) {
$(target).closest('.links').find('a.new').addClass('hide');
}
}
});
$('.links').on('click', '.delete', (e) => {
e.preventDefault();
const target = $(e.target);
const max = maxNumberLinks(target);
const nbrLinks = linksLength(target);
if (nbrLinks > 1) {
// If this brought us below the max nbr of links then show the add new link
if ((nbrLinks - 1) < max) {
target.closest('.links').find('a.new').removeClass('hide');
}
target.closest('.link').remove();
} else {
const link = target.closest('.link');
clearVals(link);
}
});
$('.links').find('.max-number-links').each((i, el) => {
const target = $(el);
const max = target.closest('.links').attr('data-max-number-links');
target.text(convertToText(max).toLowerCase());
});
});
export { eachLinks as default };