UNPKG

@patternplate/client

Version:

Universal javascript client application for patternplate

224 lines (190 loc) 7.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _url = _interopRequireDefault(require("url")); var _lodash = require("lodash"); var _react = _interopRequireDefault(require("react")); var _components = require("@patternplate/components"); var _tagHoc = _interopRequireDefault(require("tag-hoc")); var _outside = _interopRequireDefault(require("./outside")); var _searchField = _interopRequireDefault(require("./search-field")); var _withToggleStates = _interopRequireDefault(require("../connectors/with-toggle-states")); var _passThrough = _interopRequireDefault(require("../containers/pass-through")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const InfoPane = (0, _withToggleStates.default)(_components.InnerInfoPane); const SearchComponent = _components.Search.Search, SearchResult = _components.Search.SearchResult, SearchResultList = _components.Search.SearchResultList, SearchResultHeading = _components.Search.SearchResultHeading, SearchResultPreview = _components.Search.SearchResultPreview, SearchFieldSlot = _components.Search.SearchFieldSlot, SearchClose = _components.Search.Close, SearchPassThroughSlot = _components.Search.PassThroughSlot; const NOOP = () => {}; class Search extends _react.default.Component { constructor(...args) { super(...args); Object.defineProperty(this, "getSearchResult", { configurable: true, enumerable: true, writable: true, value: (item, type) => _react.default.createElement(SearchResult, { active: (this.props.activeItem || {}).id === item.id, href: item.href, id: item.id, index: item.index, icon: item.manifest.icon || item.type, name: item.manifest.displayName, key: item.id, onActivate: this.props.onActivate, onScrollRequest: this.handleScrollRequest, type: type }) }); Object.defineProperty(this, "getSearchResultPreview", { configurable: true, enumerable: true, writable: true, value: () => { const item = this.props.activeItem; switch (item.contentType) { case "doc": return _react.default.createElement(SearchResultPreview, this.props, _react.default.createElement(_components.Markdown, { source: item.contents })); default: return _react.default.createElement(SearchResultPreview, this.props, _react.default.createElement(InfoPane, { active: true, demoDependencies: (0, _lodash.values)(item.demoDependencies), demoDependents: (0, _lodash.values)(item.demoDependents), dependencies: (0, _lodash.values)(item.dependencies), dependents: (0, _lodash.values)(item.dependents), flag: item.manifest.flag, id: item.id, manifest: JSON.stringify(item.manifest, null, " "), name: item.manifest.displayName, tags: item.manifest.tags, version: item.manifest.version })); } } }); this.handleSubmit = this.handleSubmit.bind(this); this.handleUp = this.handleUp.bind(this); this.handleDown = this.handleDown.bind(this); this.handleActivate = this.handleActivate.bind(this); this.handleScrollRequest = this.handleScrollRequest.bind(this); this.getListRef = this.getListRef.bind(this); this.getSearchResult = this.getSearchResult.bind(this); } handleScrollRequest(e) { if (!this.list) { return; } const l = this.list.getBoundingClientRect(); const i = e.target.getBoundingClientRect(); if (i.bottom > l.bottom) { this.list.scrollTop = e.target.offsetTop - l.height + i.height; } if (i.top < l.top) { this.list.scrollTop = e.target.offsetTop - 30; } } getListRef(ref) { this.list = ref; } componentDidMount() { if (typeof this.props.onMount === "function") { this.props.onMount(); } } handleActivate(e) { const id = e.target.getAttribute("data-id"); const index = [...this.props.docs, ...this.props.components].findIndex(i => i.id === id); if (index > -1) { this.props.onActivate(index); } } handleUp(e) { e.stopPropagation(); if (this.props.activeItem && this.props.activeItem.index > 0) { e.preventDefault(); this.props.onUp(); } } handleDown(e) { e.stopPropagation(); const available = this.props.components.length + this.props.docs.length - 2; if (this.props.activeItem && available >= this.props.activeItem.index) { this.props.onDown(); } } handleSubmit(e) { e.preventDefault(); const props = this.props; if (!props.activeItem) { return props.onSubmit(e); } const activeItem = props.activeItem; props.onNavigate(activeItem); } render() { const props = this.props; const withComponents = props.components.length > 0; const withDocs = props.docs.length > 0; return _react.default.createElement(SearchComponent, { activeItem: props.activeItem, docs: props.docs, enabled: props.enabled, inline: props.inline, onActivate: props.inline ? NOOP : this.handleActivate, onClickOutside: props.inline ? NOOP : props.onClickOutside, onBlur: props.inline ? NOOP : props.onBlur, onChange: props.inline ? NOOP : props.onChange, onClear: props.inline ? NOOP : props.onClear, onComplete: props.inline ? NOOP : props.onComplete, onDown: props.inline ? NOOP : this.handleDown, onFocus: props.inline ? NOOP : props.onFocus, onStop: props.inline ? NOOP : props.onStop, onSubmit: props.inline ? NOOP : this.handleSubmit, onUp: props.inline ? NOOP : this.handleUp, shortcuts: props.shortcuts, suggestion: props.suggestion, legend: props.legend }, _react.default.createElement(SearchResultList, { ref: this.getListRef }, withDocs > 0 && _react.default.createElement(SearchResultHeading, null, "Docs (", props.docs.length, ")"), props.docs.map(d => this.getSearchResult(d, "doc", props)), withComponents > 0 && _react.default.createElement(SearchResultHeading, { navigationEnabled: props.navigationEnabled }, "Components (", props.components.length, ")"), props.components.map(d => this.getSearchResult(d, "pattern"))), (withComponents || withDocs) && this.getSearchResultPreview(), _react.default.createElement(SearchFieldSlot, null, _react.default.createElement(_searchField.default, { autoFocus: !props.inline, linkTo: "/search", mark: props.inline ? null : true, name: props.inline ? "inline-search" : "search", onBlur: props.onBlur, onChange: props.onChange, onClear: props.onClear, onClose: props.onClose, onComplete: props.onComplete, onDown: this.handleDown, onFocus: props.onFocus, onStop: props.onStop, onUp: this.handleUp, placeholder: "Search", suggestion: props.suggestion, title: `Search for patterns ${props.shortcuts.toggleSearch.toString()}`, value: props.value }, props.enabled && _react.default.createElement(SearchClose, { shortcut: props.shortcuts.close, clears: typeof props.value === "string" && props.value.length > 0 }))), _react.default.createElement(SearchPassThroughSlot, null, _react.default.createElement(_passThrough.default, { query: { "search-enabled": true, search: null } }))); } } exports.default = Search; //# sourceMappingURL=search.js.map