@kiwicom/smart-faq
Version:
Smart FAQ
365 lines (292 loc) • 14.7 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _idx = _interopRequireDefault(require("idx"));
var React = _interopRequireWildcard(require("react"));
var _reactRelay = require("react-relay");
var _reactRouterDom = require("react-router-dom");
var _Translate = _interopRequireDefault(require("@kiwicom/nitro/lib/components/Translate"));
var _Heading = _interopRequireDefault(require("@kiwicom/orbit-components/lib/Heading"));
var _FAQCategoriesFullpageHeader = _interopRequireDefault(require("./FAQCategoriesFullpageHeader"));
var _Responsive = require("../../SmartFAQ/common/Responsive");
var _ExtraInfoState = require("../../SmartFAQ/context/ExtraInfoState");
var _Emergencies = _interopRequireDefault(require("../../SmartFAQ/context/Emergencies"));
var _UserStatus = _interopRequireDefault(require("../../SmartFAQ/helpers/UserStatus"));
var _Loader = _interopRequireDefault(require("../../SmartFAQ/common/Loader"));
var _ScrollableBox = _interopRequireDefault(require("../../SmartFAQ/common/ScrollableBox"));
var _QueryRenderer = _interopRequireDefault(require("../../SmartFAQ/relay/QueryRenderer"));
var _index = _interopRequireDefault(require("./FAQExtraInfo/BaggageInfo/index"));
var _index2 = _interopRequireDefault(require("./FAQExtraInfo/BoardingPassesInfo/index"));
var _CustomerSupportNumber = _interopRequireDefault(require("./CustomerSupportNumber"));
var _FAQArticle = _interopRequireDefault(require("./FAQArticle"));
var _FAQCategory = _interopRequireDefault(require("./FAQCategory"));
var _Emergency = _interopRequireDefault(require("./emergencies/Emergency"));
var _EmergencyHeader = _interopRequireDefault(require("./emergencies/EmergencyHeader"));
var _Breadcrumbs = _interopRequireDefault(require("./breadcrumbs/Breadcrumbs"));
var _StaticFAQError = _interopRequireDefault(require("./StaticFAQError"));
var _trackers = require("../../shared/helpers/analytics/trackers");
var _ArticleContent = require("./ArticleDetail/ArticleContent");
var _SearchState = require("../../SmartFAQ/context/SearchState");
var _BookingState = require("../../SmartFAQ/context/BookingState");
var _GuaranteeChatInfo = require("../../shared/context/GuaranteeChatInfo");
var _tracker = require("../../shared/cuckoo/tracker");
var _PageVariant = require("../../SmartFAQ/common/PageVariant");
// @flow
// TODO - refactor this component - separated component for root categories & subcategories
var queryRoot = function queryRoot() {
var node = require("./__generated__/FAQCategoryListRootQuery.graphql");
if (node.hash && node.hash !== "a7cfcbe28fb8a53cc0cef48577a553a5") {
console.error("The definition of 'FAQCategoryListRootQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data.");
}
return require("./__generated__/FAQCategoryListRootQuery.graphql");
};
var querySubcategory = function querySubcategory() {
var node = require("./__generated__/FAQCategoryListSubcategoryQuery.graphql");
if (node.hash && node.hash !== "17bf41665b90109a6baaff0fa5f599bd") {
console.error("The definition of 'FAQCategoryListSubcategoryQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data.");
}
return require("./__generated__/FAQCategoryListSubcategoryQuery.graphql");
};
var categoryClicked = function categoryClicked(category
/*: CategoryFragment*/
, section
/*: ?FAQSectionType*/
) {
(0, _trackers.simpleTracker)('smartFAQCategories', {
action: 'clickOnCategory',
section: section || '',
categoryId: category.id,
categoryName: category.title || ''
});
(0, _tracker.track)('FAQs', 'clickOnCategory', {
section: section || '',
categoryId: category.originalId,
categoryName: category.title || ''
});
};
var RawFAQCategoryList =
/*#__PURE__*/
function (_React$Component) {
(0, _inherits2.default)(RawFAQCategoryList, _React$Component);
function RawFAQCategoryList() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, RawFAQCategoryList);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(RawFAQCategoryList)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "renderFAQArticlePerexes", function (faqs
/*: $ReadOnlyArray<?FAQArticlePerexFragment>*/
, categoryId
/*: string*/
) {
return React.createElement("div", null, faqs.filter(Boolean).map(function (faq) {
return React.createElement(_FAQArticle.default, {
key: faq.id,
article: faq,
categoryId: categoryId
});
}));
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "renderExtraInfoCategory", function (activeExtraInfoCategory) {
switch (activeExtraInfoCategory) {
case 'baggage':
return React.createElement(_index.default, null);
case 'boarding-passes':
return React.createElement(_index2.default, null);
default:
return null;
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "renderCategories", function (categories
/*: $ReadOnlyArray<CategoryFragment>*/
) {
var pathname = _this.props.history.location.pathname;
var isBaggageRoute = pathname.includes(_ExtraInfoState.categories.BAGGAGE);
var isBoardingPassRoute = pathname.includes(_ExtraInfoState.categories.BOARDING_PASS);
return React.createElement(React.Fragment, null, React.createElement(_Responsive.Desktop, null, React.createElement(_UserStatus.default.LoggedIn, null, (isBaggageRoute || isBoardingPassRoute) && React.createElement(_ExtraInfoState.ExtraInfoState.Consumer, null, function (_ref) {
var activeExtraInfoCategory = _ref.activeExtraInfoCategory;
return _this.renderExtraInfoCategory(activeExtraInfoCategory);
}))), React.createElement(_SearchState.SearchState.Consumer, null, function (_ref2) {
var changeSearchText = _ref2.changeSearchText,
resetQueriesCount = _ref2.resetQueriesCount,
searchText = _ref2.searchText;
var onSearchCancel = function onSearchCancel() {
changeSearchText('');
resetQueriesCount();
};
return React.createElement(_BookingState.BookingState.Consumer, null, function (_ref3) {
var FAQSection = _ref3.FAQSection;
return React.createElement("div", {
"data-cy": "faq-categories"
}, categories.map(function (category) {
if (category) {
return React.createElement(_reactRouterDom.Link, {
key: category.id,
to: "/faq/".concat(category.id),
style: {
textDecoration: 'none',
display: 'block'
},
onClick: function onClick() {
if (searchText.length) {
onSearchCancel();
}
categoryClicked(category, FAQSection);
}
}, React.createElement(_FAQCategory.default, {
category: category
}));
}
return null;
}));
});
}));
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "renderRootCategory", function (rendererProps
/*: RootQueryRendererParams*/
) {
if (rendererProps.error) {
return React.createElement(_StaticFAQError.default, null);
}
if (rendererProps.props) {
var categories = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQSection.subcategories;
}) || [];
var faqs = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQSection.FAQs;
}) || [];
var categoryId = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQSection.id;
}) || '';
var guaranteeArticle = rendererProps.props && rendererProps.props.FAQArticle;
return React.createElement(_Emergencies.default.Consumer, null, function (emergencies) {
var hasEmergencies = emergencies && emergencies.length > 0;
return React.createElement(_ScrollableBox.default, null, hasEmergencies && React.createElement(_EmergencyHeader.default, {
styles: "margin-top: 8px",
title: "smartfaq.faq.emergencies.current"
}), emergencies && emergencies.map(function (emergency, i) {
return (// eslint-disable-next-line react/no-array-index-key
React.createElement(_Emergency.default, {
key: i,
emergency: emergency
})
);
}), hasEmergencies && React.createElement(_EmergencyHeader.default, {
styles: "margin-top: 32px",
title: "smartfaq.faq.emergencies.solve"
}), React.createElement(_PageVariant.FullPageVersion, null, React.createElement(_FAQCategoriesFullpageHeader.default, null), React.createElement(_Heading.default, {
type: "title3",
element: "h3",
spaceAfter: "large"
}, React.createElement(_Translate.default, {
t: "smartfaq.full_page.categories.header.suggested_topics"
}))), guaranteeArticle && React.createElement(_FAQArticle.default, {
article: guaranteeArticle,
isSearchResult: true
}), _this.renderCategories(categories.filter(Boolean)), React.createElement(_PageVariant.SidebarVersion, null, _this.renderFAQArticlePerexes(faqs, categoryId)), React.createElement(_Responsive.Mobile, null, React.createElement(_UserStatus.default.LoggedIn, null, React.createElement(_CustomerSupportNumber.default, {
data: rendererProps.props
}))));
});
}
return React.createElement(_Loader.default, {
fullHeight: true
});
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "renderSubcategory", function (rendererProps
/*: SubcategoryQueryRendererParams*/
) {
if (rendererProps.error) {
return React.createElement(_StaticFAQError.default, null);
}
var FAQCategory = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQCategory;
});
if (rendererProps.props) {
var categories = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQCategory.subcategories;
}) || [];
var ancestors = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQCategory.ancestors;
}) || [];
var currentCategory = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQCategory.title;
});
var faqs = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQCategory.FAQs;
}) || [];
var categoryId = (0, _idx.default)(rendererProps.props, function (_) {
return _.FAQCategory.id;
}) || '';
if (FAQCategory === null) {
return React.createElement(_StaticFAQError.default, null);
}
return React.createElement(React.Fragment, null, React.createElement("div", null, React.createElement(_Breadcrumbs.default, {
breadcrumbs: ancestors,
currentCategory: currentCategory
})), React.createElement(_ScrollableBox.default, null, _this.renderCategories(categories.filter(Boolean)), _this.renderFAQArticlePerexes(faqs, categoryId)));
}
return React.createElement(_Loader.default, {
fullHeight: true
});
});
return _this;
}
(0, _createClass2.default)(RawFAQCategoryList, [{
key: "render",
value: function render() {
var _this$props = this.props,
categoryId = _this$props.categoryId,
section = _this$props.section,
showGuaranteeArticle = _this$props.showGuaranteeArticle;
if (categoryId) {
return React.createElement(_QueryRenderer.default, {
query: querySubcategory,
render: this.renderSubcategory,
variables: {
id: categoryId
}
});
}
return React.createElement(_QueryRenderer.default, {
query: queryRoot,
render: this.renderRootCategory,
variables: {
section: section,
showGuaranteeArticle: showGuaranteeArticle,
articleId: _ArticleContent.GUARANTEE_ARTICLE_ID
}
});
}
}]);
return RawFAQCategoryList;
}(React.Component);
var FAQCategoryList = function FAQCategoryList(props
/*: ComponentProps*/
) {
return React.createElement(_BookingState.BookingState.Consumer, null, function (_ref4) {
var FAQSection = _ref4.FAQSection;
return React.createElement(_GuaranteeChatInfo.GuaranteeChatContext.Consumer, null, function (_ref5) {
var showGuaranteeChat = _ref5.showGuaranteeChat;
return React.createElement(RawFAQCategoryList, (0, _extends2.default)({
section: FAQSection,
showGuaranteeArticle: showGuaranteeChat && props.categoryId === null
}, props));
});
});
};
var _default = (0, _reactRouterDom.withRouter)(FAQCategoryList);
exports.default = _default;
;