@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
46 lines (45 loc) • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateMobileTabs = void 0;
const add_import_to_closest_module_1 = require("../../../../utils/add-import-to-closest-module");
const elements_1 = require("../../../../utils/templates/elements");
const template_resource_1 = require("../../../../utils/templates/template-resource");
const templates_1 = require("../../../utils/templates");
const remove_attrs_1 = require("../utils/remove-attrs");
const TABS_TAG_NAME = 'tui-tabs';
const SEGMENTED_TAG_NAME = 'tui-segmented';
const TAB_ATTRIBUTE_NAME = 'tuiTab'.toLowerCase();
const MOBILE_TABS_ATTRIBUTE_NAME = 'tuiMobileTabs'.toLowerCase();
function migrateMobileTabs({ resource, recorder, fileSystem, }) {
const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem);
const templateOffset = (0, template_resource_1.getTemplateOffset)(resource);
const elements = (0, elements_1.findElementsWithAttributeOnTag)(template, [MOBILE_TABS_ATTRIBUTE_NAME], [TABS_TAG_NAME]);
if (elements.length > 0) {
(0, add_import_to_closest_module_1.addImportToClosestModule)(resource.componentPath, 'TuiSegmented', '@taiga-ui/kit');
}
elements.forEach((element) => {
(0, templates_1.replaceTag)(recorder, element.sourceCodeLocation, TABS_TAG_NAME, SEGMENTED_TAG_NAME, templateOffset);
removeMobileTabsAttribute(element, recorder, templateOffset);
element.childNodes
.filter(isElement)
.forEach((element) => removeTabAttribute(element, recorder, templateOffset));
});
}
exports.migrateMobileTabs = migrateMobileTabs;
function removeTabAttribute({ attrs, sourceCodeLocation }, recorder, templateOffset) {
const tabAttr = attrs.find((attr) => attr.name === TAB_ATTRIBUTE_NAME);
if (!tabAttr || !sourceCodeLocation) {
return;
}
(0, remove_attrs_1.removeAttrs)([tabAttr], sourceCodeLocation, recorder, templateOffset);
}
function removeMobileTabsAttribute({ attrs, sourceCodeLocation }, recorder, templateOffset) {
const mobileTabsAttr = attrs.find((attr) => attr.name === MOBILE_TABS_ATTRIBUTE_NAME);
if (!mobileTabsAttr || !sourceCodeLocation) {
return;
}
(0, remove_attrs_1.removeAttrs)([mobileTabsAttr], sourceCodeLocation, recorder, templateOffset);
}
function isElement(node) {
return Boolean(node.attrs);
}