{"version":3,"sources":["data.js","utils/Api.js","tools/conditional.js","components/PeerSales.js","utils/Prefs.js","media/no-cover.png","utils/conditional.js","utils/Session.js","components/catalogues/CatalogueCount.js","components/CommentOptions.js","utils/Expand.js","components/Comment.js","components/Comments.js","components/icons/EyeIcon.js","tools/GroupPicker.js","utils/Html.js","components/BusinessContactInfo.js","components/Overlay.js","components/QuickPick.js","components/Pubstock.js","components/catalogues/SuggestedCartsOnBrowse.js","media/b.png","components/title/BMStation.js","components/CategorySelector.js","components/title/BMNoteCats.js","components/Condition.js","components/Conditions.js","utils/Splitter.js","components/OrderSearchUser.js","components/DropMenu.js","components/RememberInput.js","tools/NumPicker.js","components/TestOrderBox.js","components/Extras.js","components/title/BMSummary.js","components/ItemSales2.js","components/ItemHistory4.js","components/title/PreviousRender.js","components/ItemLayouts.js","components/DragTable.js","components/lists/ListUpload.js","components/lists/FilterPresetSelect.js","components/lists/ListEdit.js","components/lists/ListQuickPick.js","components/BroadcastMessage.js","components/icons/XIcon.js","components/title/Share.js","components/lists/ListCount.js","components/SliderItem.js","components/lists/ListCreatePdf.js","components/lists/ListCreateExcel.js","components/lists/ListsCopy.js","components/lists/ListFolder.js","components/lists/ListArchive.js","components/lists/ListTrash.js","components/lists/ListFav.js","components/lists/ListNotes.js","components/lists/ListShare.js","components/Renderer.js","components/Paginate.js","components/title/TitleResults.js","components/Bookmark.js","components/lists/ListDelete.js","components/lists/ListItem.js","components/lists/SalesCount.js","components/lists/SeriesCount.js","components/title/BisacSelector.js","components/title/TitleField.js","components/SupplementaryInfo.js","components/title/DigitalResources.js","components/title/TitleRenderers.js","components/title/TitleEditField.js","components/title/CoverImage.js","components/title/TitleDetails.js","components/title/TitleExtras.js","components/title/TitleImage2.js","media/More_Images_v3.png","components/title/TitleLinks.js","components/title/TitleOhOo.js","components/title/TitleOrders.js","components/title/TitlePDF.js","components/title/TitleRank.js","components/title/TitleRelated2.js","components/title/TitleShare.js","components/title/Title.js","components/activity/InvoiceActivity.js","components/activity/PurchaseActivity.js","components/activity/InvoiceActivity2.js","components/activity/PurchaseActivity2.js","components/activity/SupplierActivity.js","components/activity/CustomerActivity2.js","components/activity/SupplierActivity2.js","components/SalesActivity.js","components/lists/ListPrint.js","components/PreviousOrder.js","components/ProcessPdf.js","layouts/Blank.js","media/logo.png","media/logo_dark.png","PubSub.js","components/AccountCard.js","components/LogOutLocations.js","components/AccountBox.js","components/Notifications.js","components/ResizeText.js","components/Nav2.js","layouts/Default.js","layouts/Left.js","media/logo_light.png","media/bg.jpg","layouts/LoginLayout.js","layouts/Standard.js","media/logo-small.png","components/SidePanel.js","layouts/Test.js","layouts/URLShortcuts.js","pages/analytics/AnalyticsTableHtml.js","components/FilterAutocomplete.js","components/FilterPresetLabel.js","components/FilterPresets.js","components/MagicFilters.js","components/Metafilters.js","components/BrowseFilters5.js","components/CopyISBNs.js","components/Refine.js","components/SalesSummary.js","layouts/partials/LayoutHeader.js","pages/BrowsePage4.js","pages/misc/BusinessDirectroyHelp.js","pages/BusinessDirectoryPage.js","pages/cart/CartImport.js","pages/cart/CartIsbns.js","pages/cart/CartNote.js","pages/cart/CartSubmitBtn.js","pages/cart/InputConfirm.js","pages/CartPage.js","pages/CatalougesPage.js","layouts/Webstore/WebstoreItem.js","pages/content/AppearancePage.js","pages/content/BrandingPage.js","pages/settings/FilterPresetPicker.js","pages/settings/TitleManager.js","utils/FileBrowser.js","utils/ImageSelect.js","components/utilities/TextEditor.js","components/Event.js","components/EventVisibilityToggle.js","pages/content/EventsPage.js","pages/content/Rep.js","pages/content/MyReps.js","pages/content/SiteContentPage.js","pages/content/SitePagesPage.js","pages/GiftcardActivityPage.js","pages/ManageCustomers.js","pages/GiftRegistryImport.js","pages/GiftRegistryDetails.js","pages/GiftRegistryShare.js","pages/ManageGiftRegistriesPage.js","pages/MyListsPage.js","pages/PicklistPage.js","pages/PrintGiftRegistry.js","pages/ReceiptLogoPage.js","pages/RemoteSupportPage.js","components/Iscroller.js","pages/analytics/AnalyticsFilters.js","pages/analytics/AnalyticsDetails.js","pages/analytics/AnalyticsSales.js","pages/analytics/AnaylticsTable.js","pages/analytics/AnalyticsGroup.js","pages/reports/AnalyticsPage.js","pages/reports/BackupsPage.js","pages/reports/CalandarReportsPage.js","components/EDILog.js","pages/reports/EdiActivityPage.js","pages/reports/LibraryInvestmentProjectPage.js","components/ImportComments.js","pages/reports/ManageTitleCommentsPage.js","components/previous_orders/TitlesTable.js","components/previous_orders/Notes.js","components/previous_orders/ResendOrder.js","components/previous_orders/OrderStatus.js","components/previous_orders/OrdersTable.js","components/previous_orders/CustomerPOTable.js","components/previous_orders/CustomersTable.js","pages/reports/ActivityReport.js","pages/reports/PreviousOrdersPage.js","pages/reports/Candle.js","pages/reports/SalesComparisonsChart.js","pages/reports/SalesRelativeChart.js","pages/reports/VolumeBySubject.js","pages/reports/YearOverYear.js","pages/reports/SalesSummary.js","pages/reports/SalesComparisonsPage.js","pages/reports/UsageDevices.js","pages/reports/SiteTraffic.js","pages/reports/Engagement.js","pages/reports/SiteUsagePage.js","pages/reports/UsCanPriceComparisonPage.js","pages/reports/WebstoreOrderingPage.js","pages/settings/GiftCard.js","pages/settings/GiftCardsPage.js","pages/settings/PermissionsPage4.js","components/ISOCodes.js","components/Promo.js","components/PromoManageCustomers.js","pages/settings/EnableSetting.js","pages/settings/SalesPromotionsPage.js","pages/settings/PromoCodesPage.js","pages/settings/StoreStockSharing.js","layouts/Webstore/sections/GeneralSection.js","layouts/Webstore/sections/AccountsSection.js","layouts/Webstore/sections/MSWrap.js","layouts/Webstore/MultistoreItem.js","layouts/Webstore/sections/OrderingSection.js","layouts/Webstore/Region.js","layouts/Webstore/AddRegion.js","layouts/Webstore/Provider.js","layouts/Webstore/Multiship.js","layouts/Webstore/sections/ShippingSection.js","layouts/Webstore/sections/SearchingSection.js","layouts/Webstore/sections/PricingSection.js","layouts/Webstore/sections/PaymentsSection.js","layouts/Webstore/sections/FormatPicker.js","layouts/Webstore/Hours.js","layouts/Webstore/sections/HoursSection.js","layouts/Webstore/sections/MultiStoreSection.js","layouts/Webstore/sections/SeoSection.js","layouts/Webstore/sections/AdvancedSection.js","layouts/Webstore/sections/TitlesSection.js","components/ETARangePicker.js","components/VendorETA.js","layouts/Webstore/webstore.js","layouts/Webstore/WebstoreSearch.js","pages/settings/ImpluseManager.js","layouts/Webstore/sections/ImpulseSection.js","layouts/Webstore/sections/FooterSection.js","pages/settings/WebstoreSettingsPage.js","pages/SiteUploadsPage.js","pages/StockCheckPage.js","pages/StockTitleUploadPage.js","pages/SuggestedCartsPage.js","pages/SwitchPage.js","pages/TaxPreferencesPage.js","ReloadStore.js","utils/Ani.js","utils/LiveToggle.js","pages/reports/CustomerSalesExport.js","components/ProcessReport.js","pages/analytics/TimeOfDayFilters.js","pages/analytics/MultiPointSlider.js","pages/analytics/CalandarGrid.js","pages/reports/TimeOfDaySales.js","utils/SiteRouter.js","App.js","reportWebVitals.js","index.js","utils/Utils.js"],"names":["navigation","name","slug","subnav","permission","active","condition","hide","beta","link","countries","value","label","apiPath","Cookies","get","apiGetPath","_obj","_api","path","_session_id","params","window","store_id","Object","keys","forEach","element","substring","length","apiDownload","_blank","console","log","open","apiCall","_methodName","_args","_callback","api","use_session","session_id","form_data","FormData","append","wamp_session_id","session_store_id","location","pathname","Date","now","toString","key","_params","method","body","fetch","then","response","json","r","error","reload","catch","e","conditional","true","props","other","children","string","object","Array","isArray","array","match","check","PeerSales","drawComponent","setShowActivity","isbn","useState","rows","results","setResults","summary","setSummary","loading","setLoading","locationGroups","setLocationGroups","period","summarize_province","location_group","sitesettings","is_canadian","filters","setFilters","useEffect","_status","_result","sorted_keys","reverse","_summary","shift","columns","push","title","width","dataIndex","className","render","f","onError","target","style","display","src","country","province","i","month","moment","startOf","add","format","summary_columns","parseData","map","item","index","m","values","parseSummary","menu","selectedKeys","onClick","Item","size","onChange","checked","arrow","placement","trigger","overlay","Group","defaultValue","buttonStyle","type","CloseOutlined","dataSource","concat","scroll","y","pagination","onExpand","PrefsContext","SessionContext","Provider","React","createContext","usePrefs","useContext","Prefs","useSession","Session","CatalogueCount","count","visible","setVisible","fetched","setFetched","_id","id","bmDate","destroyOnClose","onCancel","footer","Title","level","dashed","clear","message","CommentOptions","titlelist_id","comment_id","isnew","editOptions","setEditOptions","colors","args","shared_with","current_shared_with","matrix","current_author","names","Option","disabled","initialValue","visible_anywhere","valuePropName","dot","color","colour_code","text","expiry_type","direction","noStyle","expiry_date","allow_long_expiry","Expand","html","allowbreaks","expand","setExpand","ref","useRef","lineHeight","parseFloat","getComputedStyle","height","clientHeight","Math","round","getLineCount","current","dangerouslySetInnerHTML","__html","drawShareWith","_key","ret","Comment","opennew","callback","data","setData","setIsNew","modalVisible","setModalVisible","revertHTML","_html","replace","close","onFinish","fields","comment","as_author","expiry_days","success","saveComment","layout","gutter","span","rules","required","TextArea","showCount","maxLength","danger","_comment_id","htmlType","Comments","row","comments","session","getComments","request","drawComments","Display","is_store","obj","highlight","drawEditLink","editable","adjustColor","EditOutlined","author","date","Icon","xmlns","viewBox","d","transform","EyeIcon","fill","GroupPicker","show_plus_circle","inputRef","val","setVal","hover","setHover","memory","getMemory","mergedSet","Set","presets","from","slice","change","_v","handleHover","addMemory","_val","saveMemory","handleVal","_e","_update","_blur","regex","valid","test","v","toUpperCase","NumBtn","num","MemBtn","stores","store_number","segmentArray","_arr","_size","segments","ceil","_child","_index","_chitem","_chindex","content","onMouseOver","blur","plain","onVisibleChange","overlayClassName","openClassName","PlusSquareFilled","onKeyDown","mouseEnterDelay","onBlur","onFocus","select","Html","BusinessContactInfo","san","acct","addr1","addr2","city","prov","postal","phone","phone2","tollfree","fax","email","url","notes","categories","changes","webstore","edit","approvedText","logo_id","lineBreakToBr","inputString","contact_id","flex","substr","event","Paragraph","href","drawCard","Overlay","maskClosable","component","inline","auto_open","closable","bodyStyle","cloneElement","preventDefault","stopPropagation","QuickPick","supplier","setSession","group","quick_picks","toggleQuickPick","_add","_grp","dropdownClassName","showArrow","_item","Pubstock","want_store","wrap","title_suppliers","updatePrice","is_order","selectSupplier","price","list_price_usa","show_stores","suppliers","setSuppliers","class_1","setStores","prefs","updateLocale","relativeTime","future","past","s","mm","h","hh","dd","M","MM","yy","want_supplier","want_bm_data","addKeys","_str","ColumnHelp","drawOO","_code","msg","suppliers_columns","getFlag","overlayInnerStyle","fromNow","store_columns","sorter","compare","a","b","store_name","localeCompare","_country","flag","expanded","random","drawChildTable","_record","toggle","setToggle","ftr","_priority","_location","filter","priority","sort","countMatches","arr1","arr2","includes","parseSuppliers","_count","_s","_main","_secondary","_quickpicks","_qps","reduce","find","sup","_break","matches","_ret","setOpen","order_columns","drawDeliveryTime","delivery_time","delivery_time_max","letter","onhand","onorder","show_more","drawLast","_supp","_find","expandIcon","_header","rowKey","rowClassName","record","hasOwnProperty","class","last_used","CaretUpOutlined","CaretDownOutlined","expandIconColumnIndex","expandedRowKeys","expandedRowRender","align","expandable","SuggestedCartsOnBrowse","contextValues","setActive","toggleActive","drawTotalQuantity","quantity","suggested_cart_info","drawMultiStoreSplitQuantities","ms_quantity","altname","drawNotesTab","note","title_text","rep_name","rep_acct","tabBarStyle","activeKey","TabPane","tab","transitionProperty","stransitionProperty","multiStoreDisplay","singleStoreDisplay","BMStation","stationRef","station_id","station","setStation","setSent","changeStation","_station","openTitleInStation","_isbn","_loading","isNaN","setTimeout","focus","alt","bm","placeholder","CategorySelector","suggested_bm_data","class_2","category","subCategory","setCategory","setSubCategory","initCat","initSubCat","setSelected","setKey","_store","is_primary","list","_memory","split","parseMemory","suggested_class","searchFilter","_search","indexOf","setClass","getOptions","options","allowClear","onSelect","_classes","fontWeight","_mem","_catarr_obj","Modal","setRepeatByKey","ReloadOutlined","BMNoteCats","total_onhand","series","condition_code","store","setNote","subcategory","saveCategoriesNotes","_notes","_category","_subcategory","skip_note","_san","multistore_san","undefined","suppress","warn","set","setShowInput","drawNotes","flags","_split","join","showInput","drawRepeat","setRepeat","wrapperClassName","indicator","spinning","pointerEvents","onMouseEnter","Condition","showActivity","setPrefs","openState","setOpenState","toggleActivity","_view","_lbl","reopen","suggestedCategory","suggestedSubcategory","code","code_text","code_used_desc","code_used_note","minimum_onhand","backroom","held","available_onhand","pending_return","special_order","available_onorder","pending_onorder","primary_key","discount","pubdate","binding","sell_price","carton_quantity","profit_cost_string","supplier_1","supplier_2","supplier_3","section","out_of_stock_status","returnable","entered","original_publisher","row_status","sold","cart_qty","received","adjusted","returns","peer","converted_out_of_stock_status","extras","_ex","_spots","valueClass","_x","spot","spots","extra","getExtras","parseSold","_msinfo","_sold","storenum","x","drawExtra","_row","drawStoreSelector","_store_num","msinfo","switchStore","bordered","_enabled","drawToggle","_aoo","_poo","pendingOO","drawOnhand","_oh","_toh","_oh_label","drawValues","_data","_type","_cart_qty","total_stores","total_stores_region","months","total","week","onhandlocs","onorderlocs","_class","_ispeer","border","_label","ShoppingCartOutlined","drawPrice","_prev","borderLeft","borderRight","_months","drawHeadersRow","bm_notes","SalesActivity","Conditions","conditions","setConditions","_current_codes","condition_codes","_orig","addCondition","drawSelector","Splitter","updateOrder","saveSplitter","quantityInput","Form","useForm","form","cart_active","store_index","qty","mystore","findIndex","first","setFirst","updateStores","_uid","_value","itn","ind","setFieldsValue","splitter","rerender","sum","parseInt","diff","augment","decrement","_qty","_stores","most","max","updateValues","_final","_store_index","_rest_qty","update","acc","_total","distribute","_storenum","increase","_diff","remainder","equal_amt","add_amt","divvy","info","icon","okText","QuestionCircleOutlined","onPressEnter","OrderSearchUser","setOptions","saveOrder","recordKey","remembered","delaySearch","term","saveTimout","clearTimeout","_term","customers","shipto","searchUsers","showSearch","notFoundContent","onSearch","filterOption","input","option","DropMenu","history","useHistory","block","onOpen","alignLeft","vistoggle","setVistoggle","selected","custom","custom_button","onClose","closeMenu","onMouseLeave","marginLeft","RememberInput","order_note","drawRemembered","NumPicker","autoFocus","Number","TestOrderBox","cart_update","sales","is_multistore","setQuantityInput","setCondition","_default_notes","_default_class_1","_default_class_2","bm_data","updateCondition","_cond","_note","storeNum","_f","cid","getStoreNum","setSelectedFocus","setExpanded","selectedKey","setSelectedKey","makeKey","defaultKey","setDefaultKey","currentSave","setCurrentSave","isObject","_send","_suppliers_obj","selectedSuppliers","_check","_dataitem","pubprice","supplier_price","order_group","shipto_name","customer_name","cust_po","customer_po","order_notes","multistore_quantity","JSON","stringify","_p","cart","_ind","createNewSupplier","init_suppliers","initialSuppliers","order_grp","profit_margin","exchange","setSelectedSuppliers","timerSaveOrder","_supplier","_new","_increment_if_exists","_overide_group","_focus","_supacct","supplier_conditions","supplier_code","_group","currentPrice","setCurrentPrice","u","splice","_price","_updateSupplier","_sup","new_profit_margin","calculateProfitMargin","_field","_save","_order","new_sell_price","calculateSellPrice","add_key","orderBtn","setOrderBtn","_default","clearOrder","CloseCircleFilled","addBlankRow","expandCell","_publish_price","_discount","_profit_margin","_exchange","sellp","toFixed","_sell_price","pm","getColorBar","_bc","RememberCats","_a","draw","isNumeric","Extras","BMSummary","stationLoading","setStationLoading","sent","config","top","duration","maxCount","spinIcon","LoadingOutlined","spin","secondary_key","used_condition","cost","cost_locked","available_on_hand","pending_on_order","on_order","minimum_on_hand","conversion","row_id","A","B1","B2","B3","B4","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","_osstat","convertOSStat","drawSales","drawValue","drawLabel","_align","_border","_weight","logosmall","currentTarget","ItemSales2","draw_months","is_forthcoming","total_onorder","abriviateClass","abriviateExtra","_return","ttl","wk","oh","oo","ohl","ool","itm","checkBold","getClass","_r","onRow","show_peer","soldOH","soldOO","peerOH","peerOO","peerOHL","peerOOL","setAct","act","partialSum","drawSummary","ItemHistory4","divider","getStoreDefault","drawConditionSelector","_suggested","_series","PreviousRender","previous","setPrevious","previous_edition","isbns","ItemLayouts","description","image","Empty","PRESENTED_IMAGE_SIMPLE","setHighlight","dataSet","setDataSet","sequence_num","borderStyle","borderColor","borderWidth","marginTop","backgroundColor","orientation","topRowSequenceNum","DragTable","moveRow","useCallback","dragIndex","hoverIndex","_d","_h","_c","updateData","components","restProps","useDrop","accept","collect","monitor","getItem","isOver","dropClassName","drop","useDrag","isDragging","drag","DndProvider","backend","HTML5Backend","_","ListUpload","candelete","resetSort","setCanSave","canSave","list_id","updateList","position","setPosition","uploading","setUploading","setFile","processed","setProcessed","limit","uploadFile","_file","show_list","file","result","titles","txt","drawText","unshift","MenuOutlined","removeItem","_txt","eisbn","status","arr","pageSize","showSizeChanger","_text","File","Blob","generateFile","Dragger","showUploadList","customRequest","UploadOutlined","FilterPresetSelect","setPresets","store_specific","header","_itm","ListEdit","create","saving","setSaving","subcategories","cats","setCats","is_dynamic","site_content","sort_by","onhand_first","hide_non_oh_oo","sort_by_reversed","filter_preset_id","setSort","isPreset","setIsPreset","dynamic","setDynamic","setIsbns","newArr","hidden","pattern","RegExp","onConfirm","isbns_json","convertList","_list","ListQuickPick","my_lists","updateMyListsInParent","updateMyLists","_my_lists","found","quick_pick_lists","some","_checked","is_picked","_list_id","actual_id","BroadcastMessage","toURI","_string","no_whitespace","useLocation","setNames","to_channel","route","shareRoute","XSVG","XIcon","Share","store_path","customer_path","customer_url","store_url","CopyButton","copied","setCopied","navigator","clipboard","writeText","rel","FacebookFilled","ListCount","res","setRes","setSearch","updateRow","_res","in_list","fetchMyLists","g","t","updatedCount","hasQP","ShareAltOutlined","Search","enterButton","SliderItem","action","onTouchMove","onTouchStart","onTouchEnd","onMouseDown","pageX","onDown","onMouseUp","abs","onUp","ListCreatePdf","is_catalogue","selectedLayout","setSelectedLayout","isDisabled","c","progress_report_id","_sel","show_biographies","show_marketing","show_reviews","show_public_comments","show_private_comments","onSelectionChange","_options","ListCreateExcel","initOptions","permissions","titlelist_onhand","ListsCopy","onFinishForm","ListFolder","folder","selectedFolder","setSelectedFolder","folders","setFolders","fetchFolders","updateItem","getLists","changeFolder","_folder","_close","FolderFilled","highlightColor","FolderOutlined","disabledColor","ListArchive","is_archived","DownSquareFilled","DownSquareOutlined","ListTrash","is_trashed","DeleteFilled","peerColor","DeleteOutlined","ListFav","is_starred","StarFilled","favColor","StarOutlined","ListNotes","onSubmit","webstore_name","ListShare","url2","Renderer","setStartY","showClose","setShowClose","setComponent","hash","scrollY","barClose","selector","offset","scrollTo","behavior","getBoundingClientRect","document","_component","_hide_close","nativeEvent","offsetX","Paginate","save","paginate","pagesize","setPaginate","show_pagination","pageSizeOptions","precomponent","hide_single","showing_right","drawShowing","end","start","addCommas","drawShowingText","itemRender","originalElement","_page","_limit","_offset","expires","pageChange","TitleResults","has_close","related","more_sizes","more_size_rows","setCurrent","show_details","o","l","searchFilters","setSearchFilters","_filters","k","detail_category","z","exclude_isbn","colorDate","_timestamp","unix","futureColor","successColor","bestsellerColor","bestseller","drawQuantity","available","warningColor","row_price","subtitle","parseSubjectsWeird","drawPagination","row_count","marginBottom","Button","PicLeftOutlined","AppstoreOutlined","all","one","ch","floor","Bookmark","removeBookmark","titlelist_bookmarks","_path","BookFilled","drawLink","sf","objectToPath","addBookmark","BookOutlined","ListDelete","deleteList","_rows","confirm","onOk","ListItem","removeNulls","owner_name","season","vendor","agency","subject","note_posted","date_posted","date_updated","date_created","views","is_deleted","sequence","isbns_count","linkOut","bookmark_data","dateFormat","ListImage","img","imgError","setImageError","parseAuthors","authors","drawImage","cover_image_cache","maxHeight","padding","catalogue_id","SalesCount","okButtonProps","SeriesCount","next","series_num","DrawTitles","myRef","scrollIntoView","_next","getSeries","BisacSelector","setValue","strToArr","multiple","markNonBooks","treeData","_results","selectable","TitleField","field","setResult","want_keys_csv","rank","release_date","pages","publisher","audience","edition_type","weight","carton_qty","subjects","language","parseSubjectsList","parseRank","drawProductDetails","_reviews","_review","inc","_k","desc","SupplementaryInfo","opened","drawContent","Resources","TitleRenderers","can_use_pick","picklist","setPicklist","searchResults","setSearchResults","toLowerCase","languageSelect","mode","codeSelect","editionSelect","typeSelect","statusSelect","bindingsSelect","help","ucfirst","tag","forcePlainText","toolbar","buttons","resize","drawRenderer","TitleEditField","editing","annotation","setRow","setValid","setType","setTitle","addRowKeys","is_editable","rowIndex","note_id","deleteEdit","saveEdit","_visible","_title","getEdit","FormOutlined","CoverImage","cache","preview","mask","closeIcon","copyFileFromUrl","GlobalOutlined","TitleDetails","setEditing","annotation_data","setEdit","cacheBuster","setCache","canadian","has_libro_audiobook","edition","has_interiors","print_status","imprint","bio","reviews","catalogues","illustrations","interiors","marketing","links","publisher_links","author_links","getTitle","_currentedit","parseBio","_bios","_bio","drawLinks","drawArray","hasAnnotationData","_num","exists","missing_annotation_data","getAnnotationData","parseSubjects","pubdate_us","series_number","defaultActiveKey","stat","edition_num","audience_code","audience_type","audience_min","audience_max","parseSubjectsBisacs","depth","key_points","more_info","awards","promotion","printing","drawDetails","TitleExtras","media","tab_data","bios","video_links","sales_rights","pin","drawPin","PushpinFilled","PushpinOutlined","drawCount","_active","_desc_length","_comment_length","_bios_length","_reviews_length","_marketing_length","youtube_ids","grabYouTubeIDs","display_urls","grabMediaURLs","drawMarketing","media_urls","controls","drawVideosTab","entries","marketingCheck","drawMarketingTab","TitleImage2","cover_image_key","setInteriors","setOpened","image_path","setC","nav","interior_objects","getInteriorPath","_int","_cb","_b2b","maskStyle","zIndex","modalRender","effect","afterChange","touchMove","draggable","asNavFor","dots","prev","LeftCircleOutlined","RightCircleOutlined","interior","cb","b2b","slidesToShow","goTo","FullscreenOutlined","fallback","nocover","TitleLinks","_memories","setIndex","sites","ico","isbn10","isbn13","mul","charAt","toIsbn10","special","last","_url","TitleOhOo","_style","textAlign","_available","drawOhOo","TitleOrders","items","unique","sumByKey","_quantity","drawOrder","TitlePDF","showBarcode","setShowBarcode","showMarketing","setShowMarketing","show_barcode","cancelText","overlayStyle","FilePdfOutlined","TitleRank","number_only","place","is_future","lit","unlit","_lit","TitleRelated2","related_count","fullname","shortname","shortkey","ids","next_edition","comparable_titles","included_items","included_in","other_languages","other_titles","drawButtonDisplay","short_name","getRelatedEditions","TitleShare","myLists","setMyLists","parseExpand","showPubstock","url_isbn","useParams","list_price_can","binding_code","upc","sales_marketing","digital_resources","catalogue_count","isbn_type","prefix_length","can_edit","coversHighlight","copied2","setCopied2","drawISBN","ctrlKey","_can","_us","_authors","_upc","pagesValue","widthValue","heightValue","weightValue","cartonValue","CopyOutlined","isValidUPC","handleTermSlash","_author","getCanIcon","drawTable","_rank","peers","prices","sale","getPrices","CardImage","hoverable","opacity","cover","left","Meta","onerror","noCover","parseSubjectsPlain","drawPrint","InvoiceActivity","invoice","invoice_is_supplier","header_info","is_supplier","drawType","drawHeader","_info","PurchaseActivity","purchase_order","customer_info","setDrawType","is_bo","code_type","cancel_date","first_received","order","list_total","net_total","supplier_info","created","address_1","address_2","invoice_key","InvoiceActivity2","chain_number","browseLoading","setBrowseLoading","viewInBrowse","PurchaseActivity2","invoice_is_return","stage","sent_ts","bo_sta","special_orders","units","sell_total","net_cost","vendor_order_min","SupplierActivity","initFilters","orders","recent","saveFilters","drawContact","phone_2","CustomerActivity2","customer_ship_to","more","setMore","ship_to","convertFBPoints","last_activity","frequent_buyer","frequent_buyer_points","customer_type","attn","tax_code","tx1","tx2","sales_this","sales_last","sales_penultimate","combined_po","over_due","credit_limit","SupplierActivity2","defaultStore","storeSan","setStoreSan","adjustments","transfers","wanted_san","summaryColumns","is_active","Summary","ListPrint","setList","setErrror","printContents","getElementById","innerHTML","originalContents","print","printPage","PrinterOutlined","min","purchase_deadline","parseAuthorsPlain","drawRow","PreviousOrder","order_id","bookorder_id","can_print","customer","setCustomer","errorMsg","setErrorMsg","versionWarning","setVersionWarning","shipping","provider","orgname","order_number","order_date","communication_preference","delivery_type","payment_type","payment_message","promo_codes","discounts","total_gift_card_amount_used","total_owing","item_count","taxes","subtotal","online_order_version","showIcon","user_info","order_info","_cust","colorMessage","messageColor","availability","WrapSider","Sider","theme","Content","is_guest","first_name","last_name","company","email_address","phone_number","address","delivery_key","purchaseorder","convertLineBreaks","noun","suffix","pluralize","original_price","amount","cart_info","cart_notes","gift_card_info","sold_price","shipping_batches","shipment","bat","title_info","is_giftcard","giftcard_price","backorder_quantity","backorder_sub_message","sub_message","personalize","to","gift_registry_info","occasion","drawItem","ProcessPDF","process_id","progress","eta_seconds","completed","report","setReport","getProgress","percent","Blank","bg_color","PubSub","live","setLive","pubsub_session","autobahn","principal","ticket","channel_id","contact","ping","setPing","msgpser","serializer","MsgpackSerializer","jsonser","JSONSerializer","onPicklist","ee_def_id","from_pubsubid","button","SelectOutlined","openModal","onStation","onCart","onQuickPick","onBookmark","onPreset","onCorp","onContact","onPing","_session","call","connection","Connection","realm","authmethods","authid","picklist_identity","onchallenge","_method","_extra","serializers","onopen","ses","picklist_path","corp_path","session_channel_id","contact_path","cart_path","quick_pick_path","station_path","bookmark_path","preset_path","subscribe","subscription","picklist_sub","onclose","reason","details","AccountCard","LogOutLocations","setCount","AccountBox","setTrigger","available_corps","_identity","identity","Notifications","timeoutRef","vis","setVis","hideRow","notification_id","_name","state","buildNotification","message_type","visibility","misc","approved","corp","request_contact","user","onMouseOut","datechanged","fetchNotifications","hasNotifications","NotificationOutlined","ResizeText","fontSize","Nav2","setProcessing","reading","handleScan","activeElement","HTMLTextAreaElement","HTMLInputElement","setKeyword","linkToBrowse","addEventListener","removeEventListener","getTerm","_spt","keyword","searchType","setSearchType","selectBefore","hasPermission","has","getIcon","_slug","linkToPage","_newtab","_retpath","_pushstate","filter_preset_defaults","selections","listcat","mylists","getCacheKeyForFile","convertURL","_clear","_skipURL","getISBNCount","_pathname","pathToObject","getCurrentKey","SubMenu","onTitleClick","_navItem","access","_init","beta_access","hadBetaAccess","addonBefore","Default","drawDarkMode","loc","hasBanner","banner_message","admin_url","shape","ArrowUpOutlined","_color","banner","drawMessage","dark","drawPath","noborder","has_permission","checkPermission","LockOutlined","drawNoPermission","Left","collapsed","setCollapsed","SettingOutlined","BarChartOutlined","DollarOutlined","ToolOutlined","CustomerServiceOutlined","hasSider","collapsedWidth","onCollapse","collapsible","defaultCollapsed","triggerSubMenuAction","openKeys","LoginLayout","redirect","setRedirect","setError","forgot","setForgot","forgotError","setForgotError","forgotSuccess","setForgotSuccess","resetForgot","headStyle","recoverPassword","logodark","password","login","Password","remove","domain","Standard","Header","Footer","SidePanel","pubstock","offsetTop","Test","filter_info","setPageSize","setWidth","toggleSelected","isFiltering","setIsFiltering","n","_sales","getPeerFromSales","FilterFilled","FilterOutlined","rowSelection","selectedRowKeys","hideSelectAll","tableLayout","showHeader","breakpoint","onBreakpoint","URLShortcuts","PlusOutlined","ellipsis","delete","original_url","new_url","copy","AnalyticsTableHtml","temp_list_id","URLToObject","pairs","pair","decodeURIComponent","search","FilterAutocomplete","setInitFilters","local","ifilters","sortAlpha","filterUnique","searchLocal","filter_name","search_term","search_filters","FilterPresetLabel","setToolboxes","toolboxes","bookmanager","preset_id","p","preset_label","FilterPresets","showselected","getBrowse","setName","saveCurrent","_sf","version","selections_json","drawDefault","setDefault","routePath","creator","is_yours","titlelist_def","_show_create","SlidersOutlined","MagicFilters","magic_filters","drawFilter","tooltip","exclude","_char","routing_char","_set","deselectFilter","_current","selectFilter","Metafilters","metaSet","setMetaSet","meta_filters","_filter","_overwrite","_negate","_found","negate","CloseSquareFilled","CheckSquareFilled","BrowseFilters5","context","display_mode","listLabel","changed","decodeURI","tips","tool_tips","go","formatCount","resetFilter","getNameByKey","_letter","_fltr","_cat","_sub","subfilter","drawSelectedTags","_selected","toggleCategory","drawAllSelectedTags","trm","drawCategories","_required","_negated","_metafilter","any_included","any_excluded","is_included","is_excluded","selected_rows","drawFilters","align_left","CopyISBNs","_isbns","fetchISBNs","Refine","fetchRefine","FunnelPlotOutlined","SalesSummary","s1","s2","s3","LayoutHeader","todo","BrowsePage4","setDisplay","initLoaded","setInitLoaded","_change","_route","scrollTop","documentElement","forceCheck","updateFilters","setFlag","routeFilters","_filter_path","refresh","setRefresh","onPopState","chosen_supplier","_ohhand","SearchWithin","CalendarOutlined","corp_id","cart_id","done","completeSuggestedCart","getHeader","toUriHash","rowClasses","once","BusinessDirectoryHelp","BusinessDirectoryPage","InfoCircleOutlined","CartImport","uploaded","setUploaded","needsSan","setNeedsSan","setSan","selectedSupplier","setSelectedSupplier","selectedGroup","setSelectedGroup","total_rows","processed_rows","add_to_cart","edifact_san","supplier_acct","needs_san","groups","CartIsbns","titlesLoading","setTitlesLoading","titleInfo","setTitleInfo","titleResults","setTitleResults","getExtra","peer_onhand","peer_onhand_locs","peer_onorder","peer_onorder_locs","item_columns","user_id","owner_id","dsource","Map","xsource","cacheKey","setCacheKey","getTitles2","_cache_key","browseLoad","setBrowseLoad","browseCart","CartNote","saveNote","_delete","MessageFilled","destroyTooltipOnHide","CartSubmitBtn","group_bys","skipConfirm","weblink_confirmed","split_skip","check_send_multistore","checkSubmit","_weblink_confirmed","_split_skip","_check_send_multistore","_send_multistore","send_multistore","_error","tip","splitOrder","drawError","InputConfirm","CartPage","setSkipConfirm","group_by","skip","actions_disabled","convertDiscountToInt","modify","modifyInput","_msg","checkModify","getGroups","mergeNote","mergeData","average","downloadExcel","FileExcelOutlined","deleteRow","group_set","owner_set","unique_ownerset","location_set","supp","_order_grp","_owner","RollbackOutlined","store_qty","filteredCart","_rtrn","groupMultiple","assign","supplier_names","margins","by","age","location_name","as_of","_compare","filterData","alternateRowColours","CataloguesPage","showDetails","setShowDetails","setListLabel","getCatalogues","setV","searchWithin","sw","PicCenterOutlined","WebstoreItem","has_switch","disabledMsg","heading","warning","notice","setOnChange","AppearancePage","BrandingPage","favicon_path","letterhead_path","UploadDirect","setPath","fileList","setFileList","uploadButton","listType","handleUpload","onRemove","beforeUpload","maxWidth","FilterPresetPicker","TitleManager","allowPresets","form_key","preset_key","bottom","setChanged","pending","setPending","setTitles","fileUploaded","setFileUploaded","removeISBN","_titles","modal","setModal","locale","emptyText","_currentTotal","addImportToList","_presets","_eisbn","addISBN","FileBrowser","selectImage","currentDirectory","setCurrentDirectory","currentTitle","setCurrentTitle","filename","setFilename","selectedFile","setSelectedFile","_ext","setUploadVisible","fetchList","moveVisible","setMoveVisible","folderVisible","setFolderVisible","uploadVisible","closeUploadBox","files","tree","file_url","bytesToSize","last_modified","closeMove","parseChildren","is_directory","parseTree","findInArray","centered","createFolder","_from","_to","from_location","to_location","moveFile","treeDefaultExpandAll","DirectoryTree","defaultExpandAll","defaultSelectedKeys","parseSelection","node","selectedNodes","switcherIcon","parseSelected","ImageSelect","_image","TextEditor","editorRef","joditInsance","setJoditInstance","foreColor","noFollowCheckbox","iconURL","exec","editor","jodit","Jodit","toolbarButtonSize","toolbarAdaptive","disablePlugins","events","on","plainText","clipboardData","getData","selection","insertHTML","tagName","setEditorValue","_img","Event","flagRemoved","setTicket","event_created","event_end","event_id","event_start","img_path","tickets","on_expire","updated","visible_after","setEvent","removeImage","updateImage","_imgpath","display_expired","saveEvent","RangePicker","showTime","for","afterClose","removeTicket","addTicket","EventVisibilityToggle","EventsPage","getEvents","_arg","_edit","_events","drawVisibility","_event_id","_bool","_visibility","Rep","setReason","share_relationship_info","relationship_id","declined_reason","companies_represented","approveRequest","declineRequest","_my_rep","drawStatus","MyReps","selectedFilters","setSelectedFilters","fetchAll","my_reps","declined","SiteContentPage","SitePagesPage","GiftcardActivityPage","start_date","end_date","years","totals","liability","start_ts","end_ts","_totals","year","issued_in_range","issued_dollars","outstanding_dollars","outstanding_cards","min_activity_ts","max_redeem_ts","redeemed_in_range","issued_to_date","redeemed_to_date","ManageCustomers","carts","cartable","WarningOutlined","confirmText","_cart","contains_unavailable","drawCart","_customer","_order_id","customer_san","_email","customer_email","GiftRegistryImport","gift_registry_id","getRegistry","parsed","setParsed","isbn_map","isbn_hash","addTitles","GiftRegistyDetails","setIsbn","owner","is_you","shipping_id","shipping_address","shipping_encouraged","store_can_edit","date_created_ts","asc","eid","updateTitle","_inc","markPurchased","_registry_id","qty_purchased","drawSort","role","aria-label","titleColumns","col_requested","qty_requested","MinusSquareFilled","col_status","col_purchased","col_remove","removeTitle","col_blank","purchase_deadline_ts","endOf","updateRegistry","addTitle","_items","sortItems","GiftRegistryShare","copyText","setCopyText","ManageGiftRegistriesPage","include_expired","getAll","address_id","total_purchased","total_requested","_eid","MyListsPage","PickListPage","tl_misc","updateCurrent","_amt","pl_current","setMax","pl_class","pl_title","pl_author","pl_availoh","pl_pickqty","pl_price","PrintGiftRegistry","registry_id","ReceiptLogoPage","logoPath","setLogoPath","ogPath","setOgPath","getOgPath","getLogoPath","init","setInit","logo_path","printer_brand","dpi","resize_image","dither","RemoteSupportPage","Iscroller","item_key","refine","stepSize","interator","_refine","dataLength","hasMore","AnalyticsFilters","resetButton","grouping","setGrouping","getAnalytics","headers","groupby_labels","setRefine","_excluded","checkAny","_exclude","_augment","drawOptions","LineOutlined","seen","_included","hasEnglish","drawSelectionToolTip","drawLabelToolTip","_open","drawBrowseLabel","findLabel","groupby","exc","CheckOutlined","drawGroupByLabels","AnalyticsDetails","getSet","show_which","prev_total","prev_per","this_slice_days","profit","prev_grp","sandr_percentage","per","grp_per","diff_total","diff_per","profit_percentage","avg_ohage","onhand_percentage","onhand_days_percentage","_tooltip","drawTipModal","getUnit","slice_datelow","slice_datehigh","AnalyticsSales","range","high","resetScale","setView","oht","localHigh","scaleHigh","sales_total","sandr_total","sales_diff","sales_multiplier","sales_max_width","stock_total","stock_diff","stock_multiplier","stock_max_width","onorder_diff","onorder_max_width","received_total","received_max_width","pers","salesrtrn_total","sales_new","salesrtrn_new","sales_mid","salesrtrn_mid","sales_old","sales_dead","sales_prev_year","sales_space","sales_prev_diff","sales_prev_year_up","sales_prev_diff_up","onhand_scale","onhand_total","onhand_new","onhand_mid","onhand_old","onhand_dead","onorder_total","stock_prev_year","stock_prev_diff","stock_prev_year_up","stock_prev_diff_up","received_rtrn","SBRow","SBSeg","handleMouse","seg","drawOverlay","drawReceivedOverlay","_overlay","drawPreviousSalesOverlay","drawPreviousStockOverlay","fieldToTitle","inventory","receiving_returns","AnalyticsTable","grouptokens","parseSearchFilters","drilldown","htmlUrl","setHtmlUrl","synthetic","_column","column","getFromSynthetic","drilldown_column","browse_filters","fromUriHash","token","_g","drawGroupToken","objectToURL","full_titles","drawDisplaySelector","CloseCircleOutlined","title_obj","item_set","AnaylticsGroup","scale","setResetScale","view","toggleView","findHeader","_token","_includes","_excludes","excludes","drawGroupTokens","cycleValues","getWhichName","AnalyticsPage","setChange","year_alignment","period_spacing","date_period","setGroup","initIncludes","setIncludes","customFormat","turnreport","total_count","datstock_timestamp","getIterations","_days","_grping","_fltrs","_export_excel","getHigh","openWarning","_auto","remember","BrowseWarning","disabledEnding","disabledBeginning","stripTextBetweenParentheses","str","trim","onPanelChange","mom","_date","_preset","startOfMonth","startOfQuarter","getPresetToDate","disabledDate","sd","setPreset","BackupPage","setFiles","submit","md","xl","email_new","email_warning","getFieldValue","isBetween","Text","CalandarReportsPage","EDILog","doc_id","log_list","done_by_san","EdiActivityPage","contacts","file_types","edi_users","subtract","trading_with","trading_as","file_type","hide_env","display_details","setTrading","to_san","from_san","_doc_id","LibraryInvestmentProjectPage","ImportComments","isbnCol","setIsbnCol","commentCol","setCommentCol","dataLoaded","setDataLoaded","complete","setComplete","completeRows","setCompleteRows","getHeaders","cols","drawComplete","remove_previous","importComments","ManageTitleComments","CommentOutlined","drawIcon","list_name","drawRemove","deleteComment","okType","ImportOutlined","TitlesTable","title_columns","Notes","ResendOrder","OrderStatus","show_x","ignore_status","ignoreStatus","setIgnoreStatus","question","ignore","OrdersTable","bookorder_columns","customer_search","_another","title_fltrs","CustomerPOTable","table","setTable","_table","customer_pos_columns","getTable","customer_purchase_order","order_fltrs","purchase_fltrs","CustomersTable","customer_id","customer_columns","ActivityReport","last_year_start","last_year_end","current_year_start","current_year_june","getPdfForDateRange","PreviousOrdersPage","customer_purchase_orders","show_filter","keyword_search","pathToObj","objToPath","valueStyle","Candle","bar","plus","minus","per_pixel","minus_pixel","plus_pixel","drawToolTip","getPercentageIncrease","adjustOpacity","SalesComparisonsChart","days","daysInMonth","drawMonths","SalesRelativeChart","findMedian","volume","getSan","me","drawCandle","VolumeBySubject","avgHigh","all_volume_now","all_volume_then","storeHigh","me_volume_now","me_volume_then","percent_volume","average_percent_volume","percent_change","average_percent_change","YearOverYear","overall_change","my_pos","avg_vol","getWidth","_vol","w","box_width","flip","pixel","clamp","_buffer","calculated","calculateChange","avgsales","avg","avg_diff","precision","prefix","ArrowDownOutlined","SalesComparisonsPage","setSubjects","avgSales","setAvgSales","relativeSales","setRelativeSales","setSales","vbs","setVbs","yoy","setYoy","regions","validDates","setValidDates","show_actual","region","subject_code","time_weeks","scfilt","reg","weekly_title","summary_title","average_title","store_count","yoy_title","sales_title","volume_title","_start","_end","getSales","all_subjects","UsageDevices","labels","datasets","chart_type","include_keys","appendPadding","angleField","colorField","_t","getColor","radius","innerRadius","legend","statistic","whiteSpace","overflow","textOverflow","customHtml","_container","_datum","updateHover","animation","SiteTraffic","parseSiteTraffic","xField","yField","seriesField","isStack","xAxis","Engagement","Sessions","parseEngagement","SiteUsagePage","UsCanPriceComparisonPage","WebstoreOrderingPage","billing_reports","ordered","drawActions","tempdata","GiftCard","fetchSettings","emailed","encrypted_code","GiftCardEdit","saveCard","GiftCardsPage","check_balance","minimum","purchasable","emailed_message","emailed_label","emailed_rounded_corners","emailed_show_balance_link","emailed_show_store_name","emailed_disclaimer","setMin","cards","setCards","getNextGiftcardId","createISBN","setCreateISBN","setSettings","step","stringMode","PermissionPage4","selectedUser","setSelectedUser","selectedPermission","setSelectedPermission","permission_definitions","setEmail","fetchPermissions","updatePermission","_user","user_perms","roles","PermissionBox","alt_display","UserPermission","_alt","can_delete","removeUser","addUser","String","validateEmail","_added","_usr","QuestionCircleFilled","ISOCodes","freeship_isocodes","providers","setProviders","parseProviders","Promo","setPromos","promos","create_new","promocodes","canFreeShip","timezone","automatic","use_once","use_once_per_cust","apply_to_cart","on_hand","item_limit","min_value","include_filter","bisacs","bindings","lists","filter_preset","exclude_filter","applied_to","bogo_buy","bogo_free","bogo_count","uo","setUo","uoc","setUoc","setLists","promoType","setPromoType","apply","setApply","resetAllCustomers","notifyHasCustomers","has_customers","customer_count","sendForm","optionLabelProp","PromoManageCustomers","EnableSetting","setting_key","setCanFreeShip","enabled","setEnabled","settings","updateSetting","SalesPromotionsPage","meta_title","meta_recent","meta_button","meta_description","drawEditButton","drawManageButton","drawRemoveButton","removePromo","PromoCodesPage","StoreStockSharing","retail_price","quantity_mode","filter_type","toggleFiltered","is_filtered","filter_ids","updateFiltered","defaultPageSize","is_sharing","GeneralSection","setPages","drawPages","ws","default_ws_login_required_message","ws_login_required_message","is_v3","dropdownMatchSelectWidth","AccountsSection","default_ws_custom_welcome_msg","ws_custom_welcome_msg","MSWrap","MultistoreItem","OrderingSection","default_ws_message_pickup","convertOO","enableOO","setEnableOO","messageHTML","setMessageHTML","checkPreference","one_selected","_prefix","setAutoHeldSale","store_phone","aria-multiline","data-placeholder","Region","removed","setRemoved","region_code","charge_type","base_rate","base_rate_add","base_rate_max","base_rate_threshold","AddRegion","show_message","setRegions","setUpdate","setCountries","provinces","setProvinces","selectedCountry","setSelectedCountry","selectedProvince","setSelectedProvince","region_name","country_name","createNewRegion","validateTrigger","validator","Promise","resolve","reject","removeProvider","updateProvider","cost_min","cost_inc","cost_max","min_free","min_days","max_days","isbnVal","setIsbnVal","validateField","_reg","disallowed","free","Multiship","activeObj","updateGroup","_regions","_groupregions","updateProviderGroup","addProviderToGroup","_provider","_pindex","_pcount","setSel","sel","getUniqueProviderNames","drawGroup","_region","_all","popRegion","Providers","alert","isActive","CaretRightOutlined","rotate","expandIconPosition","ghost","accordion","Panel","removeProviderGroup","uniqueValues","curr","serialize","reduceArrayByKey","drawRegions","ShippingSection","multiship","setMultiship","showMultishipInfo","toPrice","_n","Link","ws_message_ship_cart","ws_message_ship","SearchingSection","PricingSection","origin","currency_type","formatter","discount_new","discount_new_except_nt","discount_non_new","discount_non_new_except_nt","PaymentsSection","setMethod","setL","setCreditCardMethod","autoHeldSale","visa","mastercard","amex","discover","FormatPicker","triggerChange","hour","minutes","utc","use12Hours","Hours","setUpdated","drawStore","store_san","drawWeekdays","hours","drawExceptions","exceptions","pos","_day","day","weekday","updateOpen","addException","p1","p2","p3","removeException","suffixIcon","inputReadOnly","drawAddDate","HoursSection","MultistoreSection","parseMessages","messages","chainnum","addr3","addr4","SeoSection","AdvancedSecion","TitlesSection","ETARangePicker","estimate_delivery","estimate_delivery_max","updateETA","isInteger","VendorETA","_min","_max","drawMSTitleBar","webstore_search","WebstoreSearch","SearchOutlined","_sn","ImpluseManager","_ti","updateDescription","drawEditForm","ImpulseSection","triggerImpulse","setTriggerImpulse","headline","isbns_info","pickup","setPickup","ship","setShip","_pickup","isbns_info_json","_ship","ImpulseOption","setOption","updateTitles","FooterSection","drawMSFooter","WebstoreSettingsPage","setWs","getSuppliers","slugify","parsePath","resetFields","onUpdateSettings","gotoSection","changePrompt","onFieldsChange","isFieldTouched","updateSettings","tabPosition","problems","drawProblems","drawElement","SiteUploadsPage","defaultSortOrder","drawRemoveFolder","openDelete","deleteFile","drawMenu","el","createElement","setAttribute","appendChild","click","download","defaultSortField","StockCheckPage","setContext","loadAnimation","container_height","getHeight","parent","postMessage","getSettings","secure","sameSite","logged_in","subTitle","StockTitleUploadPage","management","DownloadOutlined","SuggestedCartsPage","suggestedCarts","setSuggestedCarts","sharedView","setSharedView","getAllSuggestedCarts","hide_completed","sc_id","shared_date","marked_done_date","SwitchPage","old_session","old_store_id","TaxPreferencesPage","tax_groups","tax_types","has_edit_permission","groupVisible","setGroupVisible","rateVisible","setRateVisible","tax_1","groupCurrent","setGroupCurrent","rate","rateCurrent","setRateCurrent","codes","getNextCode","_rates","rate_form","rate_columns","_used","removeRate","code_columns","removeGroup","updateRate","ReloadStore","back","Ani","motion","div","LiveToggle","CustomerSalesExport","allow_custsalesexport","ProcessReport","TimeOfDayFilters","groupBy","cat","MultiPointSlider","steps","unit","sliderValue","setSliderValue","margin","onAfterChange","CalandarGrid","heatmap","calculateEqualSteps","maxValue","_steps","setSteps","color_index","maxIndex","getMaxIndex","monday_epoch","_m","TimeOfDaySales","price_days","units_days","txn_days","setGroupBy","setUnit","setDates","startDate","setStartDate","endDate","setEndDate","disableRange","tooLate","onOpenChange","getGroupBy","gb","tz","customSortOrder","sortByTimeThenValue","timeA","time","timeB","DayHistogram","colorObj","getColors","yAxis","customContent","drawPicker","min_label","max_label","avg_label","daysToData","_i","SiteRouter","dark_mode","_defaultpath","err","error_info","user_agent","userAgent","source","lineno","colno","logError","exact","is_bm","interm_upload_access","drawRoutes","App","getSession","_webstore_name","head","querySelector","existingFavicon","newFavicon","removeChild","swapFavicon","setShareCookie","_init_dark","setDark","classList","BulbFilled","BulbOutlined","basename","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","property","uniqueArray","currentItem","_divider","_encode","mid","_b","numA","numB","persision","_corp_id","_first","getTime","bytes","pow","_fontsize","_subjects","_subject","sub_labels","bisac","ss","uniqueKey","sumKey","uniqueValue","sumValue","existingItem","newItem","btn_arr","getQuantity","newObj","Buffer","base64","blank","_map","_keys","firstpage","encodeURI","_saved","parse","getFilterCount","isLetter","returnObject","_lm","startIndex","ka","hexCode","hex","col","amt","usePound"],"mappings":"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","file":"static/js/main.105e9e52.chunk.js","sourcesContent":["\n\nexport const navigation = [\n\n {\n name: \"Settings\",\n slug: \"settings\",\n subnav: [\n {\n name: \"Webstore\",\n slug: \"settings/web-store-settings\",\n permission :[ \"settings\"],\n active : true,\n },\n {\n name: \"Permissions\",\n slug: \"settings/permissions\",\n permission : [\"edit\"],\n active : true,\n },\n {\n name: \"Gift Cards\",\n slug: \"settings/gift-cards\",\n active : true,\n condition : \"is_bm\",\n },\n {\n name: \"Stock Sharing\",\n slug: \"settings/store-stock-sharing\",\n active : true,\n },\n {\n name: \"Promo Codes\",\n slug: \"settings/promo-codes\",\n permission :[ \"settings\"],\n active : true,\n },\n {\n name: \"Sales Promotions\",\n slug: \"settings/sales-promotions\",\n permission :[ \"settings\"],\n active : true,\n },\n {\n name: \"Tax Preferences\",\n slug: \"settings/tax-preferences\",\n active : true,\n },\n {\n name: \"Receipt Logo\",\n slug: \"settings/receipt-logo\",\n active : true,\n condition : \"is_bm\",\n },\n {\n name: \"Stock and Title Uploads\",\n slug: \"settings/stock-title-uploads\",\n permission : [\"interm_upload_access\"],\n active : true,\n hide : true,\n },\n\n {\n name: \"Stock Managment\",\n slug: \"settings/stock-managment\",\n permission : [\"titlelist_onhand\"],\n active : true,\n hide : true,\n },\n\n \n ]\n },\n {\n name: \"Content\",\n slug: \"content\",\n subnav: [\n {\n name: \"Events\",\n slug: \"content/events\",\n active : true,\n },\n {\n name: \"Branding\",\n slug: \"content/branding\",\n active : true,\n },\n { \n name: \"Webstore Designer\",\n slug: \"https://devbiz.bookmanager.com/create\",\n permission : [\"content\"],\n beta: \"content_creator\",\n link : true,\n active : false,\n },\n {\n name: \"Site Uploads\",\n slug: \"content/site-uploads\",\n active : true,\n }\n ]\n },\n {\n name: \"Reports\",\n slug: \"reports\",\n subnav: [\n {\n name: \"Analytics\",\n slug: \"reports/analytics\",\n permission : [\"analytics\"],\n active : true,\n condition : \"is_bm\",\n },\n {\n name: \"Time of Day Sales\",\n slug: \"reports/time-of-day-sales\",\n permission : [\"analytics\"],\n active : true,\n condition : \"is_bm\",\n },\n // {\n // name: \"Emailed Gift Cards\",\n // slug: \"reports/emailed-gift-cards\",\n // active : true,\n // },\n {\n name: \"Backups\",\n slug: \"reports/backups\",\n permission : [\"confidential\"],\n active : true,\n condition : \"is_bm\",\n },\n {\n name: \"Calendar Reports\",\n slug: \"reports/calandar-reports\",\n active : false,\n },\n {\n name: \"EDI Activity\",\n slug: \"reports/edi-activity\",\n condition : \"is_bm\",\n active : true,\n },\n // {\n // name : \"Library Investment Project\",\n // slug : \"reports/library-investment-project\"\n // },\n {\n name: \"Manage Comments\",\n slug: \"reports/manage-title-comments\",\n active : true,\n },\n {\n name: \"Manage Gift Registries\",\n slug: \"reports/manage-gift-registries\",\n active : true,\n },\n {\n name: \"Manage Customer Carts\",\n slug: \"reports/manage-customers\",\n active : true,\n },\n {\n name: \"Previous Orders\",\n slug: \"reports/previous-orders\",\n active : true,\n },\n {\n name: \"Industry Sales Comparisons\",\n slug: \"reports/industry-sales-comparisons\",\n permission : [\"analytics\"],\n condition : \"is_bm\",\n active : true,\n },\n {\n name: \"Site Usage\",\n slug: \"reports/site-usage\",\n active : true,\n },\n {\n name: \"Gift Card Activity\",\n slug: \"reports/gift-card-activity\",\n condition : \"is_bm\",\n active : true,\n },\n\n {\n name: \"Customer Sales Export\",\n slug: \"reports/customer-sales-export\",\n permission : [\"confidential\"],\n condition : \"is_bm\",\n active : true,\n },\n\n // {\n // name : \"US/CAN Price Comparison\",\n // slug : \"reports/uscan-price-comparison\"\n // },\n // {\n // name : \"Webstore Ordering\",\n // slug : \"reports/webstore-ordering\"\n // }\n\n\n ]\n },\n {\n name: \"Purchasing\",\n slug: \"purchasing\",\n subnav: [\n {\n name: \"Cart\",\n slug: \"purchasing/cart\",\n active : true,\n },\n {\n name: \"Browse\",\n slug: \"status\",\n active : true,\n \n },\n {\n name: \"Catalogues\",\n slug: \"listcat\",\n active : true,\n },\n {\n name: \"My lists\",\n slug: \"mylists\",\n active : true,\n },\n {\n name: \"My reps\",\n slug: \"purchasing/my-reps\",\n active : true,\n },\n {\n name: \"Suggested Carts\",\n slug: \"purchasing/suggested-carts\",\n active : false,\n },\n {\n name: \"Business directory\",\n slug: \"purchasing/business-directory\",\n active : false,\n }\n ]\n },\n {\n name: \"Support\",\n slug: \"support\",\n subnav: [\n {\n name: \"Remote support\",\n slug: \"support/remote-support\",\n active : true,\n },\n {\n name: \"Help Center\",\n slug: \"https://support.bookmanager.com/\",\n link : true,\n active : true,\n }\n ]\n }\n]\n\n\nexport const hist = {\n \"draw_months\": 14,\n \"extras\": {\n \"backroom\": 0,\n \"held\": 1,\n \"onhand\": 26,\n \"onorder\": 0,\n \"pending_return\": 0,\n \"special_order\": 0\n },\n \"rows\": [\n {\n \"class\": \"adjusted\",\n \"title\": \"View your detailed activity (adjustments) for this title\",\n \"total\": 0,\n \"months\": [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n \"week\": 0\n },\n {\n \"class\": \"returns\",\n \"title\": \"View your detailed activity (returns) for this title\",\n \"total\": 1,\n \"months\": [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n \"week\": 0\n },\n {\n \"class\": \"received\",\n \"title\": \"View your detailed activity (orders) for this title(1st rcvd 1409727600)\",\n \"total\": 591,\n \"months\": [\n 35,\n 30,\n 30,\n 10,\n 35,\n 20,\n 84,\n 12,\n 24,\n 24,\n 12,\n 48,\n 24,\n 0\n ],\n \"week\": 0\n },\n {\n \"class\": \"sold\",\n \"title\": \"View your detailed activity (sales) for this title\",\n \"total\": 563,\n \"months\": [\n 23,\n 30,\n 25,\n 19,\n 22,\n 23,\n 70,\n 27,\n 22,\n 23,\n 18,\n 26,\n 29,\n 8\n ],\n \"week\": 8\n },\n {\n \"class\": \"peer\",\n \"title\": \"Weighted monthly sales at all Canadian stores\",\n \"total_stores\": 178,\n \"total_stores_region\": \"\",\n \"months\": [\n 742,\n 856,\n 648,\n 959,\n 1010,\n 2348,\n 1093,\n 899,\n 907,\n 689,\n 1190,\n 1250,\n 414\n ],\n \"week\": 242,\n \"onhand\": 674,\n \"onhandlocs\": 136,\n \"onorder\": 247,\n \"onorderlocs\": 59\n }\n ],\n \"notes\": \"INDIG-   $26.95 [pand] Teachings of Plants\",\n \"station_id\": \"\"\n}\n\nexport const itemdata = {\n \"authors\": [\n \"Katie Bickell\"\n ],\n \"price\": \"22.00\",\n \"rank\": {\n \"bestseller\": 24568\n },\n \"binding\": \"Paperback\",\n \"release_date\": 1601362800,\n \"is_forthcoming\": false,\n \"available\": [\n {\n \"code\": \"\",\n \"text\": \"\",\n \"row_price\": \"22.00\",\n \"used\": false,\n \"note\": \"\",\n \"onhand\": \"3\",\n \"discount\": null,\n \"availability\": \"available\",\n \"message\": \"3 in store\",\n \"sub_message\": \"\"\n }\n ],\n \"canadian\": true,\n \"title\": \"Always Brave, Sometimes Kind\",\n \"subtitle\": \"A Novel\",\n \"eisbn\": \"7KkAOaEmoWXUpIcCJHBNgQ\",\n \"height\": 8.5,\n \"width\": 5.5,\n \"pages\": 272,\n \"publisher\": \"TouchWood Editions\",\n \"has_libro_audiobook\": false,\n \"audience\": null,\n \"edition\": \"\",\n \"edition_type\": null,\n \"has_interiors\": false,\n \"print_status\": null,\n \"imprint\": \"TouchWood Editions\",\n \"series\": null,\n \"series_num\": null,\n \"isbn\": \"9781927366xxx\",\n \"weight\": 0.75,\n \"carton_qty\": 40,\n \"description\": \"

An exciting debut novel told in connected short stories that captures the diverse and complicated networks of people who stretch our communities\\u2014sometimes farther than we know.<\\/i><\\/b>

Set in the cities, reserves, and rural reaches of Alberta, Katie Bickell\\u2019s debut novel is told in a series of stories that span the years from 1990 to 2016, through cycles of boom and bust in the oil fields, government budget cuts and workers rights policies, the rising opioid crisis, and the intersecting lives of people whose communities sometimes stretch farther than they know.<\\/p>

We meet a teenage runaway who goes into labour at the West Edmonton Mall, a doctor managing hospital overflow in a time of healthcare cutbacks, a broke dad making extra pay through a phone sex line, a young musician who dreams of fame beyond the reserve, and a dedicated hockey mom grappling with sense of self when she\\u2019s no longer needed\\u2014or welcome\\u2014at the rink.<\\/p>

Always Brave, Sometimes Kind<\\/i> captures a network of friends, caregivers, in-laws, and near misses, with each character\\u2019s life coming into greater focus as we learn more about the people around them. Tracing alliances and betrayals from different perspectives over decades, Bickell writes an ode to home and community that is both warm and gritty, well-defined and utterly complicated.<\\/p>\",\n \"bio\": [\n \"

Katie Bickell<\\/b> emigrated from England to northern Alberta in 1990. Her fiction has been published in the Tahoma Literary Review<\\/i> and Alberta Views<\\/I> and her essays have appeared in WestWord Magazine, HERizons Magazine<\\/i>, and on The Temper<\\/i>. Chapters from Always Brave, Sometimes Kind<\\/i> have received the Alberta Literary Award\\u2019s Howard O\\u2019Hagan for Short Story, the Writers Guild of Alberta\\u2019s Emerging Writer Award, and won the Alberta Views<\\/i> Fiction Prize. Katie lives in Sherwood Park, Alberta, just outside of Edmonton.<\\/p>\"\n ],\n \"comments\": [],\n \"reviews\": [],\n \"subjects\": [\n {\n \"subject\": \"Fiction\",\n \"sub_labels\": [\n {\n \"bisac\": \"FIC066000\",\n \"label\": \"Small Town & Rural\"\n },\n {\n \"bisac\": \"FIC048000\",\n \"label\": \"Urban & Street Lit\"\n },\n {\n \"bisac\": \"FIC019000\",\n \"label\": \"Literary\"\n }\n ]\n }\n ],\n \"catalogues\": [],\n \"illustrations\": \"na (no illustration)\",\n \"interiors\": []\n}\n\nexport const units = [\n {\n type: '< 1 Month',\n value: 907,\n sales: 14663,\n color: \"#333\",\n },\n {\n type: '2-9 Months',\n value: 1282,\n sales: 18819,\n color: \"#555\",\n },\n {\n type: '10-12 Months',\n value: 21,\n sales: 184,\n color: \"#777\",\n },\n {\n type: '> 12 Months',\n value: 94,\n sales: 458,\n color: \"#999\",\n }\n];\n\nexport const stock = [\n {\n type: 'On hand',\n value: 55613,\n color: \"#333\",\n },\n {\n type: 'On Order',\n value: 24295,\n color: \"#555\",\n }\n];\n\n\nexport const filters = {\n \"subj1\": [\n {\n \"k\": \"JUV\",\n \"c\": \"4077\",\n \"e\": \"Juvenile Fiction\"\n },\n {\n \"k\": \"FIC\",\n \"c\": \"3721\",\n \"e\": \"Fiction\"\n },\n {\n \"k\": \"JNF\",\n \"c\": \"1522\",\n \"e\": \"Juvenile Nonfiction\"\n },\n {\n \"k\": \"BIO\",\n \"c\": \"1216\",\n \"e\": \"Biography & Autobiography\"\n },\n {\n \"k\": \"SEL\",\n \"c\": \"889\",\n \"e\": \"Self-Help\"\n },\n {\n \"k\": \"YAF\",\n \"c\": \"793\",\n \"e\": \"Young Adult Fiction\"\n },\n {\n \"k\": \"HIS\",\n \"c\": \"748\",\n \"e\": \"History\"\n },\n {\n \"k\": \"CKB\",\n \"c\": \"739\",\n \"e\": \"Cooking\"\n },\n {\n \"k\": \"SOC\",\n \"c\": \"678\",\n \"e\": \"Social Science\"\n },\n {\n \"k\": \"GAM\",\n \"c\": \"490\",\n \"e\": \"Games & Activities\"\n },\n {\n \"k\": \"HEA\",\n \"c\": \"438\",\n \"e\": \"Health & Fitness\"\n },\n {\n \"k\": \"OCC\",\n \"c\": \"436\",\n \"e\": \"Body, Mind & Spirit\"\n },\n {\n \"k\": \"CGN\",\n \"c\": \"426\",\n \"e\": \"Comics & Graphic Novels\"\n },\n {\n \"k\": \"FAM\",\n \"c\": \"389\",\n \"e\": \"Family & Relationships\"\n },\n {\n \"k\": \"BUS\",\n \"c\": \"385\",\n \"e\": \"Business & Economics\"\n },\n {\n \"k\": \"NAT\",\n \"c\": \"362\",\n \"e\": \"Nature\"\n },\n {\n \"k\": \"PSY\",\n \"c\": \"346\",\n \"e\": \"Psychology\"\n },\n {\n \"k\": \"SCI\",\n \"c\": \"344\",\n \"e\": \"Science\"\n },\n {\n \"k\": \"_PZ\",\n \"c\": \"337\",\n \"e\": \"__ Puzzles\"\n },\n {\n \"k\": \"POL\",\n \"c\": \"333\",\n \"e\": \"Political Science\"\n },\n {\n \"k\": \"_ST\",\n \"c\": \"311\",\n \"e\": \"__ Stationery\"\n },\n {\n \"k\": \"HUM\",\n \"c\": \"285\",\n \"e\": \"Humor\"\n },\n {\n \"k\": \"TRV\",\n \"c\": \"270\",\n \"e\": \"Travel\"\n },\n {\n \"k\": \"ART\",\n \"c\": \"268\",\n \"e\": \"Art\"\n },\n {\n \"k\": \"REL\",\n \"c\": \"236\",\n \"e\": \"Religion\"\n },\n {\n \"k\": \"CAL\",\n \"c\": \"230\",\n \"e\": \"Calendar\"\n },\n {\n \"k\": \"_GM\",\n \"c\": \"221\",\n \"e\": \"__ Games\"\n },\n {\n \"k\": \"SPO\",\n \"c\": \"218\",\n \"e\": \"Sports & Recreation\"\n },\n {\n \"k\": \"REF\",\n \"c\": \"215\",\n \"e\": \"Reference\"\n },\n {\n \"k\": \"POE\",\n \"c\": \"204\",\n \"e\": \"Poetry\"\n },\n {\n \"k\": \"CRA\",\n \"c\": \"197\",\n \"e\": \"Crafts & Hobbies\"\n },\n {\n \"k\": \"PHI\",\n \"c\": \"154\",\n \"e\": \"Philosophy\"\n },\n {\n \"k\": \"MED\",\n \"c\": \"152\",\n \"e\": \"Medical\"\n },\n {\n \"k\": \"GAR\",\n \"c\": \"142\",\n \"e\": \"Gardening\"\n },\n {\n \"k\": \"LCO\",\n \"c\": \"135\",\n \"e\": \"Literary Collections\"\n },\n {\n \"k\": \"_AC\",\n \"c\": \"130\",\n \"e\": \"__ Activity Cards\"\n },\n {\n \"k\": \"_TY\",\n \"c\": \"128\",\n \"e\": \"__ Toys & Plush\"\n },\n {\n \"k\": \"PHO\",\n \"c\": \"120\",\n \"e\": \"Photography\"\n },\n {\n \"k\": \"MUS\",\n \"c\": \"120\",\n \"e\": \"Music\"\n },\n {\n \"k\": \"HOM\",\n \"c\": \"120\",\n \"e\": \"House & Home\"\n },\n {\n \"k\": \"TRU\",\n \"c\": \"108\",\n \"e\": \"True Crime\"\n },\n {\n \"k\": \"YAN\",\n \"c\": \"104\",\n \"e\": \"Young Adult Nonfiction\"\n },\n {\n \"k\": \"PER\",\n \"c\": \"103\",\n \"e\": \"Performing Arts\"\n },\n {\n \"k\": \"_OT\",\n \"c\": \"101\",\n \"e\": \"__ Other\"\n },\n {\n \"k\": \"LIT\",\n \"c\": \"86\",\n \"e\": \"Literary Criticism\"\n },\n {\n \"k\": \"PET\",\n \"c\": \"85\",\n \"e\": \"Pets\"\n },\n {\n \"k\": \"LAN\",\n \"c\": \"81\",\n \"e\": \"Language Arts & Disciplines\"\n },\n {\n \"k\": \"NON\",\n \"c\": \"77\",\n \"e\": \"Non-Classifiable\"\n },\n {\n \"k\": \"DES\",\n \"c\": \"76\",\n \"e\": \"Design\"\n },\n {\n \"k\": \"TEC\",\n \"c\": \"72\",\n \"e\": \"Technology & Engineering\"\n },\n {\n \"k\": \"_BM\",\n \"c\": \"67\",\n \"e\": \"__ Bookmarks\"\n },\n {\n \"k\": \"ARC\",\n \"c\": \"49\",\n \"e\": \"Architecture\"\n },\n {\n \"k\": \"ANT\",\n \"c\": \"47\",\n \"e\": \"Antiques & Collectibles\"\n },\n {\n \"k\": \"EDU\",\n \"c\": \"46\",\n \"e\": \"Education\"\n },\n {\n \"k\": \"COM\",\n \"c\": \"44\",\n \"e\": \"Computers\"\n },\n {\n \"k\": \"TRA\",\n \"c\": \"42\",\n \"e\": \"Transportation\"\n },\n {\n \"k\": \"LAW\",\n \"c\": \"34\",\n \"e\": \"Law\"\n },\n {\n \"k\": \"DRA\",\n \"c\": \"27\",\n \"e\": \"Drama\"\n },\n {\n \"k\": \"_MP\",\n \"c\": \"26\",\n \"e\": \"__ Maps\"\n },\n {\n \"k\": \"MAT\",\n \"c\": \"26\",\n \"e\": \"Mathematics\"\n },\n {\n \"k\": \"_CL\",\n \"c\": \"25\",\n \"e\": \"__ Clothing & Apparel\"\n },\n {\n \"k\": \"_AV\",\n \"c\": \"24\",\n \"e\": \"__ Audio & Video\"\n },\n {\n \"k\": \"FOR\",\n \"c\": \"16\",\n \"e\": \"Foreign Language Study\"\n },\n {\n \"k\": \"STU\",\n \"c\": \"9\",\n \"e\": \"Study Aids\"\n },\n {\n \"k\": \"BIB\",\n \"c\": \"7\",\n \"e\": \"Bibles\"\n },\n {\n \"k\": \"_LG\",\n \"c\": \"6\",\n \"e\": \"__ Luggage\"\n },\n {\n \"k\": \"_HM\",\n \"c\": \"6\",\n \"e\": \"__ House & Home\"\n },\n {\n \"k\": \"_GC\",\n \"c\": \"4\",\n \"e\": \"__ Greeting Cards\"\n },\n {\n \"k\": \"_RA\",\n \"c\": \"3\",\n \"e\": \"__ Reading Accessories\"\n },\n {\n \"k\": \"VID\",\n \"c\": \"2\",\n \"e\": \"Video & DVD Genre\"\n },\n {\n \"k\": \"CUR\",\n \"c\": \"1\",\n \"e\": \"Current Events\"\n }\n ],\n \"binding\": [\n {\n \"k\": \"PB\",\n \"c\": \"10522\",\n \"e\": \"Paperback (PB)\"\n },\n {\n \"k\": \"HC\",\n \"c\": \"4814\",\n \"e\": \"Hardcover (HC)\"\n },\n {\n \"k\": \"BB\",\n \"c\": \"547\",\n \"e\": \"Boardbook (BB)\"\n },\n {\n \"k\": \"OT\",\n \"c\": \"482\",\n \"e\": \"Other (OT)\"\n },\n {\n \"k\": \"PU\",\n \"c\": \"329\",\n \"e\": \"Puzzle (PU)\"\n },\n {\n \"k\": \"CA\",\n \"c\": 230,\n \"e\": \"Calendar (CA)\",\n \"subfilter\": [\n {\n \"k\": \"CAP104\",\n \"c\": \"24\",\n \"e\": \"Day by day Calendar\"\n },\n {\n \"k\": \"CAP103\",\n \"c\": \"41\",\n \"e\": \"Engagement Calendar\"\n },\n {\n \"k\": \"CAP102\",\n \"c\": \"13\",\n \"e\": \"Mini Calendar\"\n },\n {\n \"k\": \"CAP110\",\n \"c\": \"1\",\n \"e\": \"Student Calendar\"\n },\n {\n \"k\": \"CAP106\",\n \"c\": \"73\",\n \"e\": \"Wall Calendar\"\n }\n ]\n },\n {\n \"k\": \"GM\",\n \"c\": \"168\",\n \"e\": \"Game (GM)\"\n },\n {\n \"k\": \"CS\",\n \"c\": \"134\",\n \"e\": \"Cards (CS)\"\n },\n {\n \"k\": \"VP\",\n \"c\": \"54\",\n \"e\": \"Vinyl Paperback (VP)\"\n },\n {\n \"k\": \"SP\",\n \"c\": \"33\",\n \"e\": \"Spiral Bound (SP)\"\n },\n {\n \"k\": \"BM\",\n \"c\": \"26\",\n \"e\": \"Bookmark (BM)\"\n },\n {\n \"k\": \"MP\",\n \"c\": \"25\",\n \"e\": \"Sheetmap (MP)\"\n },\n {\n \"k\": \"AD\",\n \"c\": \"19\",\n \"e\": \"Audio CD (AD)\"\n },\n {\n \"k\": \"CG\",\n \"c\": \"19\",\n \"e\": \"Clothing (CG)\"\n },\n {\n \"k\": \"BK\",\n \"c\": \"17\",\n \"e\": \"Book (BK)\"\n },\n {\n \"k\": \"BX\",\n \"c\": \"11\",\n \"e\": \"Box or Slipcased (BX)\"\n },\n {\n \"k\": \"TY\",\n \"c\": \"11\",\n \"e\": \"Toy (TY)\"\n },\n {\n \"k\": \"SE\",\n \"c\": \"9\",\n \"e\": \"Set (SE)\"\n },\n {\n \"k\": \"LT\",\n \"c\": \"8\",\n \"e\": \"Leather\\/Fine Binding (LT)\"\n },\n {\n \"k\": \"BA\",\n \"c\": \"7\",\n \"e\": \"Bath Book (BA)\"\n },\n {\n \"k\": \"TO\",\n \"c\": \"5\",\n \"e\": \"Tote bag (TO)\"\n },\n {\n \"k\": \"BG\",\n \"c\": \"5\",\n \"e\": \"Board Game (BG)\"\n },\n {\n \"k\": \"CD\",\n \"c\": \"5\",\n \"e\": \"Audio CD (CD)\"\n },\n {\n \"k\": \"LB\",\n \"c\": \"3\",\n \"e\": \"Library Binding (LB)\"\n },\n {\n \"k\": \"DO\",\n \"c\": \"2\",\n \"e\": \"Doll (DO)\"\n },\n {\n \"k\": \"GC\",\n \"c\": \"2\",\n \"e\": \"Greeting Card (GC)\"\n },\n {\n \"k\": \"CL\",\n \"c\": \"1\",\n \"e\": \"Cloth Book (CL)\"\n },\n {\n \"k\": \"ST\",\n \"c\": \"1\",\n \"e\": \"Stapled (ST)\"\n },\n {\n \"k\": \"CM\",\n \"c\": \"1\",\n \"e\": \"Audio CD (MP3) (CM)\"\n },\n {\n \"k\": \"VB\",\n \"c\": \"1\",\n \"e\": \"Vinyl Bound (VB)\"\n }\n ],\n \"status\": [\n {\n \"k\": \"rankcaranked\",\n \"c\": \"14617\",\n \"e\": \"Popular\"\n },\n {\n \"k\": \"recent\",\n \"c\": \"428\",\n \"e\": \"Recent releases\"\n },\n {\n \"k\": \"fc\",\n \"c\": \"96\",\n \"e\": \"Future releases\",\n \"n\": 1\n },\n {\n \"k\": \"--\"\n },\n {\n \"k\": \"__instock\",\n \"e\": \"What's in store\",\n \"c\": \"19861\"\n },\n {\n \"k\": \"__onorder\",\n \"e\": \"What's on order\",\n \"c\": \"723\"\n },\n {\n \"k\": \"11C\",\n \"c\": \"16152\",\n \"e\": \"regular stock\"\n },\n {\n \"k\": \"11CR\",\n \"c\": \"4037\",\n \"e\": \"bargain stock\"\n },\n {\n \"k\": \"--\"\n },\n {\n \"k\": \"__canada\",\n \"e\": \"Canadian author\",\n \"c\": \"2460\"\n }\n ],\n \"pubdate\": [\n {\n \"k\": \"2021z09z01\",\n \"c\": \"1\",\n \"e\": \"Sep 2021\"\n },\n {\n \"k\": \"2021z08z01\",\n \"c\": \"11\",\n \"e\": \"Aug 2021\"\n },\n {\n \"k\": \"2021z07z01\",\n \"c\": \"313\",\n \"e\": \"Jul 2021\"\n },\n {\n \"k\": \"2021z06z01\",\n \"c\": \"652\",\n \"e\": \"Jun 2021\"\n },\n {\n \"k\": \"2021z05z01\",\n \"c\": \"729\",\n \"e\": \"May 2021\"\n },\n {\n \"k\": \"2021z04z01\",\n \"c\": \"698\",\n \"e\": \"Apr 2021\"\n },\n {\n \"k\": \"2021z03z01\",\n \"c\": \"639\",\n \"e\": \"Mar 2021\"\n },\n {\n \"k\": \"2021z02z01\",\n \"c\": \"472\",\n \"e\": \"Feb 2021\"\n },\n {\n \"k\": \"2021z01z01\",\n \"c\": \"453\",\n \"e\": \"Jan 2021\"\n },\n {\n \"k\": \"2020z12z01\",\n \"c\": \"345\",\n \"e\": \"Dec 2020\"\n },\n {\n \"k\": \"2020z11z01\",\n \"c\": \"393\",\n \"e\": \"Nov 2020\"\n },\n {\n \"k\": \"2020z10z01\",\n \"c\": \"676\",\n \"e\": \"Oct 2020\"\n },\n {\n \"k\": \"2020z09z01\",\n \"c\": \"671\",\n \"e\": \"Sep 2020\"\n },\n {\n \"k\": \"2020z08z01\",\n \"c\": \"311\",\n \"e\": \"Aug 2020\"\n },\n {\n \"k\": \"2020z07z01\",\n \"c\": \"224\",\n \"e\": \"Jul 2020\"\n },\n {\n \"k\": \"2020z06z01\",\n \"c\": \"261\",\n \"e\": \"Jun 2020\"\n },\n {\n \"k\": \"2020z05z01\",\n \"c\": \"239\",\n \"e\": \"May 2020\"\n },\n {\n \"k\": \"2020z04z01\",\n \"c\": \"316\",\n \"e\": \"Apr 2020\"\n },\n {\n \"k\": \"2020z03z01\",\n \"c\": \"368\",\n \"e\": \"Mar 2020\"\n },\n {\n \"k\": \"2020z02z01\",\n \"c\": \"219\",\n \"e\": \"Feb 2020\"\n },\n {\n \"k\": \"2020z01z01\",\n \"c\": \"267\",\n \"e\": \"Jan 2020\"\n },\n {\n \"k\": \"2019z01z01\",\n \"c\": \"2589\",\n \"e\": \"2019\"\n },\n {\n \"k\": \"2018z01z01\",\n \"c\": \"1466\",\n \"e\": \"2018\"\n },\n {\n \"k\": \"2017z01z01\",\n \"c\": \"1002\",\n \"e\": \"2017\"\n },\n {\n \"k\": \"2016z01z01\",\n \"c\": \"722\",\n \"e\": \"2016\"\n },\n {\n \"k\": \"2015z01z01\",\n \"c\": \"545\",\n \"e\": \"2015\"\n },\n {\n \"k\": \"2014z01z01\",\n \"c\": \"458\",\n \"e\": \"2014\"\n },\n {\n \"k\": \"2013z01z01\",\n \"c\": \"296\",\n \"e\": \"2013\"\n },\n {\n \"k\": \"2012z01z01\",\n \"c\": \"274\",\n \"e\": \"2012\"\n },\n {\n \"k\": \"2011z01z01\",\n \"c\": \"220\",\n \"e\": \"2011\"\n },\n {\n \"k\": \"2010z01z01\",\n \"c\": \"186\",\n \"e\": \"2010\"\n },\n {\n \"k\": \"2009z01z01\",\n \"c\": \"169\",\n \"e\": \"2009\"\n },\n {\n \"k\": \"2008z01z01\",\n \"c\": \"166\",\n \"e\": \"2008\"\n },\n {\n \"k\": \"2007z01z01\",\n \"c\": \"149\",\n \"e\": \"2007\"\n },\n {\n \"k\": \"2006z01z01\",\n \"c\": \"105\",\n \"e\": \"2006\"\n },\n {\n \"k\": \"2005z01z01\",\n \"c\": \"76\",\n \"e\": \"2005\"\n },\n {\n \"k\": \"2004z01z01\",\n \"c\": \"82\",\n \"e\": \"2004\"\n },\n {\n \"k\": \"2003z01z01\",\n \"c\": \"82\",\n \"e\": \"2003\"\n },\n {\n \"k\": \"2002z01z01\",\n \"c\": \"67\",\n \"e\": \"2002\"\n },\n {\n \"k\": \"2001z01z01\",\n \"c\": \"59\",\n \"e\": \"2001\"\n },\n {\n \"k\": \"2000z01z01\",\n \"c\": \"41\",\n \"e\": \"2000\"\n },\n {\n \"k\": \"1999z01z01\",\n \"c\": \"44\",\n \"e\": \"1999\"\n },\n {\n \"k\": \"1998z01z01\",\n \"c\": \"37\",\n \"e\": \"1998\"\n },\n {\n \"k\": \"1997z01z01\",\n \"c\": \"40\",\n \"e\": \"1997\"\n },\n {\n \"k\": \"1996z01z01\",\n \"c\": \"22\",\n \"e\": \"1996\"\n },\n {\n \"k\": \"1995z01z01\",\n \"c\": \"24\",\n \"e\": \"1995\"\n },\n {\n \"k\": \"1994z01z01\",\n \"c\": \"15\",\n \"e\": \"1994\"\n },\n {\n \"k\": \"1993z01z01\",\n \"c\": \"16\",\n \"e\": \"1993\"\n },\n {\n \"k\": \"1992z01z01\",\n \"c\": \"17\",\n \"e\": \"1992\"\n },\n {\n \"k\": \"1991z01z01\",\n \"c\": \"18\",\n \"e\": \"1991\"\n },\n {\n \"k\": \"1990z01z01\",\n \"c\": \"17\",\n \"e\": \"1990\"\n },\n {\n \"k\": \"1989z01z01\",\n \"c\": \"4\",\n \"e\": \"1989\"\n },\n {\n \"k\": \"1988z01z01\",\n \"c\": \"16\",\n \"e\": \"1988\"\n },\n {\n \"k\": \"1987z01z01\",\n \"c\": \"10\",\n \"e\": \"1987\"\n },\n {\n \"k\": \"1986z01z01\",\n \"c\": \"9\",\n \"e\": \"1986\"\n },\n {\n \"k\": \"1985z01z01\",\n \"c\": \"6\",\n \"e\": \"1985\"\n },\n {\n \"k\": \"1984z01z01\",\n \"c\": \"9\",\n \"e\": \"1984\"\n },\n {\n \"k\": \"1983z01z01\",\n \"c\": \"11\",\n \"e\": \"1983\"\n },\n {\n \"k\": \"1982z01z01\",\n \"c\": \"8\",\n \"e\": \"1982\"\n },\n {\n \"k\": \"1981z01z01\",\n \"c\": \"8\",\n \"e\": \"1981\"\n },\n {\n \"k\": \"1980z01z01\",\n \"c\": \"4\",\n \"e\": \"1980\"\n },\n {\n \"k\": \"1979z01z01\",\n \"c\": \"2\",\n \"e\": \"1979\"\n },\n {\n \"k\": \"1978z01z01\",\n \"c\": \"2\",\n \"e\": \"1978\"\n },\n {\n \"k\": \"1977z01z01\",\n \"c\": \"2\",\n \"e\": \"1977\"\n },\n {\n \"k\": \"1976z01z01\",\n \"c\": \"4\",\n \"e\": \"1976\"\n },\n {\n \"k\": \"1974z01z01\",\n \"c\": \"2\",\n \"e\": \"1974\"\n },\n {\n \"k\": \"1973z01z01\",\n \"c\": \"5\",\n \"e\": \"1973\"\n },\n {\n \"k\": \"1971z01z01\",\n \"c\": \"5\",\n \"e\": \"1971\"\n },\n {\n \"k\": \"1970z01z01\",\n \"c\": \"1\",\n \"e\": \"1970\"\n },\n {\n \"k\": \"1968z01z01\",\n \"c\": \"3\",\n \"e\": \"1968\"\n },\n {\n \"k\": \"1967z01z01\",\n \"c\": \"1\",\n \"e\": \"1967\"\n },\n {\n \"k\": \"1966z01z01\",\n \"c\": \"1\",\n \"e\": \"1966\"\n },\n {\n \"k\": \"1963z01z01\",\n \"c\": \"2\",\n \"e\": \"1963\"\n },\n {\n \"k\": \"1961z01z01\",\n \"c\": \"4\",\n \"e\": \"1961\"\n },\n {\n \"k\": \"1960z01z01\",\n \"c\": \"2\",\n \"e\": \"1960\"\n },\n {\n \"k\": \"1958z01z01\",\n \"c\": \"2\",\n \"e\": \"1958\"\n },\n {\n \"k\": \"1954z01z01\",\n \"c\": \"1\",\n \"e\": \"1954\"\n },\n {\n \"k\": \"1950z01z01\",\n \"c\": \"1\",\n \"e\": \"1950\"\n },\n {\n \"k\": \"1931z01z01\",\n \"c\": \"1\",\n \"e\": \"1931\"\n },\n {\n \"k\": \"\",\n \"c\": \"2473\",\n \"e\": \"\"\n }\n ],\n \"audience\": [\n {\n \"k\": \"a0to2\",\n \"c\": \"367\",\n \"e\": \"Ages 3 and under\"\n },\n {\n \"k\": \"a2to4\",\n \"c\": \"672\",\n \"e\": \"Ages 2-4\"\n },\n {\n \"k\": \"a4to6\",\n \"c\": \"1873\",\n \"e\": \"Ages 4-6\"\n },\n {\n \"k\": \"a6to9\",\n \"c\": \"2028\",\n \"e\": \"Ages 6-9\"\n },\n {\n \"k\": \"a9to12\",\n \"c\": \"1562\",\n \"e\": \"Ages 9-12\"\n },\n {\n \"k\": \"a12under\",\n \"c\": \"5000\",\n \"e\": \"All ages 12 and under\"\n },\n {\n \"k\": \"a12over\",\n \"c\": \"1105\",\n \"e\": \"Ages 12 and over\"\n }\n ],\n \"excludes\": []\n}\n\nexport const countries =\n\n[\n { value : \"aar\", label : \"Afar\"},\n { value : \"abk\", label : \"Abkhaz\"},\n { value : \"ace\", label : \"Achinese\"},\n { value : \"ach\", label : \"Acoli\"},\n { value : \"ada\", label : \"Adangme\"},\n { value : \"ady\", label : \"Adygei\"},\n { value : \"afa\", label : \"Afro-Asiatic languages\"},\n { value : \"afh\", label : \"Afrihili\"},\n { value : \"afr\", label : \"Afrikaans\"},\n { value : \"ain\", label : \"Ainu\"},\n { value : \"aka\", label : \"Akan\"},\n { value : \"akk\", label : \"Akkadian\"},\n { value : \"alb\", label : \"Albanian\"},\n { value : \"ale\", label : \"Aleut\"},\n { value : \"alg\", label : \"Algonquian languages\"},\n { value : \"alt\", label : \"Southern Altai\"},\n { value : \"amh\", label : \"Amharic\"},\n { value : \"ang\", label : \"English, Old (ca. 450-1100)\"},\n { value : \"anp\", label : \"Angika\"},\n { value : \"apa\", label : \"Apache languages\"},\n { value : \"ara\", label : \"Arabic\"},\n { value : \"arc\", label : \"Official Aramaic; Imperial Aramaic (700-300 BCE)\"},\n { value : \"arg\", label : \"Aragonese\"},\n { value : \"arm\", label : \"Armenian\"},\n { value : \"arn\", label : \"Mapudungun; Mapuche\"},\n { value : \"arp\", label : \"Arapaho\"},\n { value : \"art\", label : \"Artificial languages\"},\n { value : \"arw\", label : \"Arawak\"},\n { value : \"asm\", label : \"Assamese\"},\n { value : \"ast\", label : \"Asturian; Bable; Leonese; Asturleonese\"},\n { value : \"ath\", label : \"Athapascan languages\"},\n { value : \"aus\", label : \"Australian languages\"},\n { value : \"ava\", label : \"Avaric\"},\n { value : \"ave\", label : \"Avestan\"},\n { value : \"awa\", label : \"Awadhi\"},\n { value : \"aym\", label : \"Aymara\"},\n { value : \"aze\", label : \"Azerbaijani\"},\n { value : \"bad\", label : \"Banda languages\"},\n { value : \"bai\", label : \"Bamileke languages\"},\n { value : \"bak\", label : \"Bashkir\"},\n { value : \"bal\", label : \"Baluchi\"},\n { value : \"bam\", label : \"Bambara\"},\n { value : \"ban\", label : \"Balinese\"},\n { value : \"baq\", label : \"Basque\"},\n { value : \"bas\", label : \"Basa\"},\n { value : \"bat\", label : \"Baltic languages\"},\n { value : \"bej\", label : \"Beja; Bedawiyet\"},\n { value : \"bel\", label : \"Belarusian\"},\n { value : \"bem\", label : \"Bemba\"},\n { value : \"ben\", label : \"Bengali\"},\n { value : \"ber\", label : \"Berber languages\"},\n { value : \"bho\", label : \"Bhojpuri\"},\n { value : \"bih\", label : \"Bihari languages\"},\n { value : \"bik\", label : \"Bikol\"},\n { value : \"bin\", label : \"Bini; Edo\"},\n { value : \"bis\", label : \"Bislama\"},\n { value : \"bla\", label : \"Siksika\"},\n { value : \"bnt\", label : \"Bantu languages\"},\n { value : \"bos\", label : \"Bosnian\"},\n { value : \"bra\", label : \"Braj\"},\n { value : \"bre\", label : \"Breton\"},\n { value : \"btk\", label : \"Batak languages\"},\n { value : \"bua\", label : \"Buriat\"},\n { value : \"bug\", label : \"Buginese\"},\n { value : \"bul\", label : \"Bulgarian\"},\n { value : \"bur\", label : \"Burmese\"},\n { value : \"byn\", label : \"Blin; Bilin\"},\n { value : \"cad\", label : \"Caddo\"},\n { value : \"cai\", label : \"Central American Indian languages\"},\n { value : \"car\", label : \"Galibi Carib\"},\n { value : \"cat\", label : \"Catalan\"},\n { value : \"cau\", label : \"Caucasian languages\"},\n { value : \"ceb\", label : \"Cebuano\"},\n { value : \"cel\", label : \"Celtic languages\"},\n { value : \"cha\", label : \"Chamorro\"},\n { value : \"chb\", label : \"Chibcha\"},\n { value : \"che\", label : \"Chechen\"},\n { value : \"chg\", label : \"Chagatai\"},\n { value : \"chi\", label : \"Chinese\"},\n { value : \"chk\", label : \"Chuukese (Truk)\"},\n { value : \"chm\", label : \"Mari\"},\n { value : \"chn\", label : \"Chinook jargon\"},\n { value : \"cho\", label : \"Choctaw\"},\n { value : \"chp\", label : \"Chipewyan; Dene Suline\"},\n { value : \"chr\", label : \"Cherokee\"},\n { value : \"chu\", label : \"Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic\"},\n { value : \"chv\", label : \"Chuvash\"},\n { value : \"chy\", label : \"Cheyenne\"},\n { value : \"cmc\", label : \"Chamic languages\"},\n { value : \"cop\", label : \"Coptic\"},\n { value : \"cor\", label : \"Cornish\"},\n { value : \"cos\", label : \"Corsican\"},\n { value : \"cpe\", label : \"Creoles and pidgins, English-based\"},\n { value : \"cpf\", label : \"Creoles and pidgins, French-based\"},\n { value : \"cpp\", label : \"Creoles and pidgins, Portuguese-based\"},\n { value : \"cre\", label : \"Cree\"},\n { value : \"crh\", label : \"Crimean Turkish; Crimean Tatar\"},\n { value : \"crp\", label : \"Creoles and pidgins\"},\n { value : \"csb\", label : \"Kashubian\"},\n { value : \"cus\", label : \"Cushitic languages\"},\n { value : \"cze\", label : \"Czech\"},\n { value : \"dak\", label : \"Dakota\"},\n { value : \"dan\", label : \"Danish\"},\n { value : \"dar\", label : \"Dargwa\"},\n { value : \"day\", label : \"Land Dayak languages\"},\n { value : \"del\", label : \"Delaware\"},\n { value : \"den\", label : \"Slave (Athapascan)\"},\n { value : \"dgr\", label : \"Dogrib\"},\n { value : \"din\", label : \"Dinka\"},\n { value : \"div\", label : \"Divehi; Dhivehi; Maldivian\"},\n { value : \"doi\", label : \"Dogri\"},\n { value : \"dra\", label : \"Dravidian languages\"},\n { value : \"dsb\", label : \"Lower Sorbian\"},\n { value : \"dua\", label : \"Duala\"},\n { value : \"dum\", label : \"Dutch, Middle (ca. 1050-1350)\"},\n { value : \"dut\", label : \"Dutch; Flemish\"},\n { value : \"dyu\", label : \"Dyula\"},\n { value : \"dzo\", label : \"Dzongkha\"},\n { value : \"efi\", label : \"Efik\"},\n { value : \"egy\", label : \"Egyptian (Ancient)\"},\n { value : \"eka\", label : \"Ekajuk\"},\n { value : \"elx\", label : \"Elamite\"},\n { value : \"eng\", label : \"English\"},\n { value : \"enm\", label : \"English, Middle (1100-1500)\"},\n { value : \"epo\", label : \"Esperanto\"},\n { value : \"est\", label : \"Estonian\"},\n { value : \"ewe\", label : \"Ewe\"},\n { value : \"ewo\", label : \"Ewondo\"},\n { value : \"fan\", label : \"Fang\"},\n { value : \"fao\", label : \"Faroese\"},\n { value : \"fat\", label : \"Fanti\"},\n { value : \"fij\", label : \"Fijian\"},\n { value : \"fil\", label : \"Filipino; Pilipino\"},\n { value : \"fin\", label : \"Finnish\"},\n { value : \"fiu\", label : \"Finno-Ugrian languages\"},\n { value : \"fkv\", label : \"Kvensk\"},\n { value : \"fon\", label : \"Fon\"},\n { value : \"fre\", label : \"French\"},\n { value : \"frm\", label : \"French, Middle (ca. 1400-1600)\"},\n { value : \"fro\", label : \"French, Old (ca. 842-1400)\"},\n { value : \"frr\", label : \"Northern Frisian\"},\n { value : \"frs\", label : \"Eastern Frisian\"},\n { value : \"fry\", label : \"Western Frisian\"},\n { value : \"ful\", label : \"Fulah\"},\n { value : \"fur\", label : \"Friulian\"},\n { value : \"gaa\", label : \"Gã\"},\n { value : \"gay\", label : \"Gayo\"},\n { value : \"gba\", label : \"Gbaya\"},\n { value : \"gem\", label : \"Germanic languages\"},\n { value : \"geo\", label : \"Georgian\"},\n { value : \"ger\", label : \"German\"},\n { value : \"gez\", label : \"Ethiopic (Ge’ez)\"},\n { value : \"gil\", label : \"Gilbertese\"},\n { value : \"gla\", label : \"Scottish Gaelic\"},\n { value : \"gle\", label : \"Irish\"},\n { value : \"glg\", label : \"Galician\"},\n { value : \"glv\", label : \"Manx\"},\n { value : \"gmh\", label : \"German, Middle High (ca. 1050-1500)\"},\n { value : \"goh\", label : \"German, Old High (ca. 750-1050)\"},\n { value : \"gon\", label : \"Gondi\"},\n { value : \"gor\", label : \"Gorontalo\"},\n { value : \"got\", label : \"Gothic\"},\n { value : \"grb\", label : \"Grebo\"},\n { value : \"grc\", label : \"Greek, Ancient (to 1453)\"},\n { value : \"gre\", label : \"Greek, Modern (1453-)\"},\n { value : \"grn\", label : \"Guarani\"},\n { value : \"gsw\", label : \"Swiss German; Alemannic\"},\n { value : \"guj\", label : \"Gujarati\"},\n { value : \"gwi\", label : \"Gwich’in\"},\n { value : \"hai\", label : \"Haida\"},\n { value : \"hat\", label : \"Haitian French Creole\"},\n { value : \"hau\", label : \"Hausa\"},\n { value : \"haw\", label : \"Hawaiian\"},\n { value : \"heb\", label : \"Hebrew\"},\n { value : \"her\", label : \"Herero\"},\n { value : \"hil\", label : \"Hiligaynon\"},\n { value : \"him\", label : \"Himachali languages; Western Pahari languages\"},\n { value : \"hin\", label : \"Hindi\"},\n { value : \"hit\", label : \"Hittite\"},\n { value : \"hmn\", label : \"Hmong; Mong\"},\n { value : \"hmo\", label : \"Hiri Motu\"},\n { value : \"hrv\", label : \"Croatian\"},\n { value : \"hsb\", label : \"Upper Sorbian\"},\n { value : \"hun\", label : \"Hungarian\"},\n { value : \"hup\", label : \"Hupa\"},\n { value : \"iba\", label : \"Iban\"},\n { value : \"ibo\", label : \"Igbo\"},\n { value : \"ice\", label : \"Icelandic\"},\n { value : \"ido\", label : \"Ido\"},\n { value : \"iii\", label : \"Sichuan Yi; Nuosu\"},\n { value : \"ijo\", label : \"Ijo languages\"},\n { value : \"iku\", label : \"Inuktitut\"},\n { value : \"ile\", label : \"Interlingue; Occidental\"},\n { value : \"ilo\", label : \"Iloko\"},\n { value : \"ina\", label : \"Interlingua (International Auxiliary Language Association)\"},\n { value : \"inc\", label : \"Indic languages\"},\n { value : \"ind\", label : \"Indonesian\"},\n { value : \"ine\", label : \"Indo-European languages\"},\n { value : \"inh\", label : \"Ingush\"},\n { value : \"ipk\", label : \"Inupiaq\"},\n { value : \"ira\", label : \"Iranian languages\"},\n { value : \"iro\", label : \"Iroquoian languages\"},\n { value : \"ita\", label : \"Italian\"},\n { value : \"jav\", label : \"Javanese\"},\n { value : \"jbo\", label : \"Lojban\"},\n { value : \"jpn\", label : \"Japanese\"},\n { value : \"jpr\", label : \"Judeo-Persian\"},\n { value : \"jrb\", label : \"Judeo-Arabic\"},\n { value : \"kaa\", label : \"Kara-Kalpak\"},\n { value : \"kab\", label : \"Kabyle\"},\n { value : \"kac\", label : \"Kachin; Jingpho\"},\n { value : \"kal\", label : \"Kalâtdlisut; Greenlandic\"},\n { value : \"kam\", label : \"Kamba\"},\n { value : \"kan\", label : \"Kannada\"},\n { value : \"kar\", label : \"Karen languages\"},\n { value : \"kas\", label : \"Kashmiri\"},\n { value : \"kau\", label : \"Kanuri\"},\n { value : \"kaw\", label : \"Kawi\"},\n { value : \"kaz\", label : \"Kazakh\"},\n { value : \"kbd\", label : \"Kabardian (Circassian)\"},\n { value : \"kha\", label : \"Khasi\"},\n { value : \"khi\", label : \"Khoisan languages\"},\n { value : \"khm\", label : \"Central Khmer\"},\n { value : \"kho\", label : \"Khotanese; Sakan\"},\n { value : \"kik\", label : \"Kikuyu; Gikuyu\"},\n { value : \"kin\", label : \"Kinyarwanda\"},\n { value : \"kir\", label : \"Kirghiz; Kyrgyz\"},\n { value : \"kmb\", label : \"Kimbundu\"},\n { value : \"kok\", label : \"Konkani\"},\n { value : \"kom\", label : \"Komi\"},\n { value : \"kon\", label : \"Kongo\"},\n { value : \"kor\", label : \"Korean\"},\n { value : \"kos\", label : \"Kusaiean (Caroline Islands)\"},\n { value : \"kpe\", label : \"Kpelle\"},\n { value : \"krc\", label : \"Karachay-Balkar\"},\n { value : \"krl\", label : \"Karelian\"},\n { value : \"kro\", label : \"Kru languages\"},\n { value : \"kru\", label : \"Kurukh\"},\n { value : \"kua\", label : \"Kuanyama\"},\n { value : \"kum\", label : \"Kumyk\"},\n { value : \"kur\", label : \"Kurdish\"},\n { value : \"kut\", label : \"Kutenai\"},\n { value : \"lad\", label : \"Ladino\"},\n { value : \"lah\", label : \"Lahnda\"},\n { value : \"lam\", label : \"Lamba\"},\n { value : \"lao\", label : \"Lao\"},\n { value : \"lat\", label : \"Latin\"},\n { value : \"lav\", label : \"Latvian\"},\n { value : \"lez\", label : \"Lezgian\"},\n { value : \"lim\", label : \"Limburgish\"},\n { value : \"lin\", label : \"Lingala\"},\n { value : \"lit\", label : \"Lithuanian\"},\n { value : \"lol\", label : \"Mongo-Nkundu\"},\n { value : \"loz\", label : \"Lozi\"},\n { value : \"ltz\", label : \"Luxembourgish; Letzeburgesch\"},\n { value : \"lua\", label : \"Luba-Lulua\"},\n { value : \"lub\", label : \"Luba-Katanga\"},\n { value : \"lug\", label : \"Ganda\"},\n { value : \"lui\", label : \"Luiseño\"},\n { value : \"lun\", label : \"Lunda\"},\n { value : \"luo\", label : \"Luo (Kenya and Tanzania)\"},\n { value : \"lus\", label : \"Lushai\"},\n { value : \"mac\", label : \"Macedonian\"},\n { value : \"mad\", label : \"Madurese\"},\n { value : \"mag\", label : \"Magahi\"},\n { value : \"mah\", label : \"Marshallese\"},\n { value : \"mai\", label : \"Maithili\"},\n { value : \"mak\", label : \"Makasar\"},\n { value : \"mal\", label : \"Malayalam\"},\n { value : \"man\", label : \"Mandingo\"},\n { value : \"mao\", label : \"Maori\"},\n { value : \"map\", label : \"Austronesian languages\"},\n { value : \"mar\", label : \"Marathi\"},\n { value : \"mas\", label : \"Masai\"},\n { value : \"may\", label : \"Malay\"},\n { value : \"mdf\", label : \"Moksha\"},\n { value : \"mdr\", label : \"Mandar\"},\n { value : \"men\", label : \"Mende\"},\n { value : \"mga\", label : \"Irish, Middle (ca. 1100-1550)\"},\n { value : \"mic\", label : \"Mi’kmaq; Micmac\"},\n { value : \"min\", label : \"Minangkabau\"},\n { value : \"mis\", label : \"Uncoded languages\"},\n { value : \"mkh\", label : \"Mon-Khmer languages\"},\n { value : \"mlg\", label : \"Malagasy\"},\n { value : \"mlt\", label : \"Maltese\"},\n { value : \"mnc\", label : \"Manchu\"},\n { value : \"mni\", label : \"Manipuri\"},\n { value : \"mno\", label : \"Manobo languages\"},\n { value : \"moh\", label : \"Mohawk\"},\n { value : \"mol\", label : \"Moldavian; Moldovan\"},\n { value : \"mon\", label : \"Mongolian\"},\n { value : \"mos\", label : \"Mooré; Mossi\"},\n { value : \"mul\", label : \"Multiple languages\"},\n { value : \"mun\", label : \"Munda languages\"},\n { value : \"mus\", label : \"Creek\"},\n { value : \"mwl\", label : \"Mirandese\"},\n { value : \"mwr\", label : \"Marwari\"},\n { value : \"myn\", label : \"Mayan languages\"},\n { value : \"myv\", label : \"Erzya\"},\n { value : \"nah\", label : \"Nahuatl languages\"},\n { value : \"nai\", label : \"North American Indian languages\"},\n { value : \"nap\", label : \"Neapolitan\"},\n { value : \"nau\", label : \"Nauruan\"},\n { value : \"nav\", label : \"Navajo\"},\n { value : \"nbl\", label : \"Ndebele, South\"},\n { value : \"nde\", label : \"Ndebele, North\"},\n { value : \"ndo\", label : \"Ndonga\"},\n { value : \"nds\", label : \"Low German; Low Saxon\"},\n { value : \"nep\", label : \"Nepali\"},\n { value : \"new\", label : \"Newari; Nepal Bhasa\"},\n { value : \"nia\", label : \"Nias\"},\n { value : \"nic\", label : \"Niger-Kordofanian languages\"},\n { value : \"niu\", label : \"Niuean\"},\n { value : \"nno\", label : \"Norwegian Nynorsk\"},\n { value : \"nob\", label : \"Norwegian Bokmål\"},\n { value : \"nog\", label : \"Nogai\"},\n { value : \"non\", label : \"Old Norse\"},\n { value : \"nor\", label : \"Norwegian\"},\n { value : \"nqo\", label : \"N’Ko\"},\n { value : \"nso\", label : \"Pedi; Sepedi; Northern Sotho\"},\n { value : \"nub\", label : \"Nubian languages\"},\n { value : \"nwc\", label : \"Classical Newari; Old Newari; Classical Nepal Bhasa\"},\n { value : \"nya\", label : \"Chichewa; Chewa; Nyanja\"},\n { value : \"nym\", label : \"Nyamwezi\"},\n { value : \"nyn\", label : \"Nyankole\"},\n { value : \"nyo\", label : \"Nyoro\"},\n { value : \"nzi\", label : \"Nzima\"},\n { value : \"oci\", label : \"Occitan (post 1500)\"},\n { value : \"oji\", label : \"Ojibwa\"},\n { value : \"ori\", label : \"Oriya\"},\n { value : \"orm\", label : \"Oromo\"},\n { value : \"osa\", label : \"Osage\"},\n { value : \"oss\", label : \"Ossetian; Ossetic\"},\n { value : \"ota\", label : \"Turkish, Ottoman\"},\n { value : \"oto\", label : \"Otomian languages\"},\n { value : \"paa\", label : \"Papuan languages\"},\n { value : \"pag\", label : \"Pangasinan\"},\n { value : \"pal\", label : \"Pahlavi\"},\n { value : \"pam\", label : \"Pampanga; Kapampangan\"},\n { value : \"pan\", label : \"Panjabi\"},\n { value : \"pap\", label : \"Papiamento\"},\n { value : \"pau\", label : \"Palauan\"},\n { value : \"peo\", label : \"Old Persian (ca. 600-400 B.C.)\"},\n { value : \"per\", label : \"Persian\"},\n { value : \"phi\", label : \"Philippine languages\"},\n { value : \"phn\", label : \"Phoenician\"},\n { value : \"pli\", label : \"Pali\"},\n { value : \"pol\", label : \"Polish\"},\n { value : \"pon\", label : \"Ponapeian\"},\n { value : \"por\", label : \"Portuguese\"},\n { value : \"pra\", label : \"Prakrit languages\"},\n { value : \"pro\", label : \"Provençal, Old (to 1500); Occitan, Old (to 1500)\"},\n { value : \"pus\", label : \"Pushto; Pashto\"},\n { value : \"qar\", label : \"Aranés\"},\n { value : \"qav\", label : \"Valencian\"},\n { value : \"que\", label : \"Quechua\"},\n { value : \"raj\", label : \"Rajasthani\"},\n { value : \"rap\", label : \"Rapanui\"},\n { value : \"rar\", label : \"Rarotongan; Cook Islands Maori\"},\n { value : \"roa\", label : \"Romance languages\"},\n { value : \"roh\", label : \"Romansh\"},\n { value : \"rom\", label : \"Romany\"},\n { value : \"rum\", label : \"Romanian\"},\n { value : \"run\", label : \"Rundi\"},\n { value : \"rup\", label : \"Aromanian; Arumanian; Macedo-Romanian\"},\n { value : \"rus\", label : \"Russian\"},\n { value : \"sad\", label : \"Sandawe\"},\n { value : \"sag\", label : \"Sango\"},\n { value : \"sah\", label : \"Yakut\"},\n { value : \"sai\", label : \"South American Indian languages\"},\n { value : \"sal\", label : \"Salishan languages\"},\n { value : \"sam\", label : \"Samaritan Aramaic\"},\n { value : \"san\", label : \"Sanskrit\"},\n { value : \"sas\", label : \"Sasak\"},\n { value : \"sat\", label : \"Santali\"},\n { value : \"scc\", label : \"Serbian\"},\n { value : \"scn\", label : \"Sicilian\"},\n { value : \"sco\", label : \"Scots (lallans)\"},\n { value : \"scr\", label : \"Croatian\"},\n { value : \"sel\", label : \"Selkup\"},\n { value : \"sem\", label : \"Semitic languages\"},\n { value : \"sga\", label : \"Irish, Old (to 1100)\"},\n { value : \"sgn\", label : \"Sign languages\"},\n { value : \"shn\", label : \"Shan\"},\n { value : \"sid\", label : \"Sidamo\"},\n { value : \"sin\", label : \"Sinhala; Sinhalese\"},\n { value : \"sio\", label : \"Siouan languages\"},\n { value : \"sit\", label : \"Sino-Tibetan languages\"},\n { value : \"sla\", label : \"Slavic languages\"},\n { value : \"slo\", label : \"Slovak\"},\n { value : \"slv\", label : \"Slovenian\"},\n { value : \"sma\", label : \"Southern Sami\"},\n { value : \"sme\", label : \"Northern Sami\"},\n { value : \"smi\", label : \"Sami languages\"},\n { value : \"smj\", label : \"Lule Sami\"},\n { value : \"smn\", label : \"Inari Sami\"},\n { value : \"smo\", label : \"Samoan\"},\n { value : \"sms\", label : \"Skolt Sami\"},\n { value : \"sna\", label : \"Shona\"},\n { value : \"snd\", label : \"Sindhi\"},\n { value : \"snk\", label : \"Soninke\"},\n { value : \"sog\", label : \"Sogdian\"},\n { value : \"som\", label : \"Somali\"},\n { value : \"son\", label : \"Songhai languages\"},\n { value : \"sot\", label : \"Sotho; Sesotho\"},\n { value : \"spa\", label : \"Spanish\"},\n { value : \"srd\", label : \"Sardinian\"},\n { value : \"srn\", label : \"Sranan Tongo\"},\n { value : \"srp\", label : \"Serbian\"},\n { value : \"srr\", label : \"Serer\"},\n { value : \"ssa\", label : \"Nilo-Saharan languages\"},\n { value : \"ssw\", label : \"Swazi; Swati\"},\n { value : \"suk\", label : \"Sukuma\"},\n { value : \"sun\", label : \"Sundanese\"},\n { value : \"sus\", label : \"Susu\"},\n { value : \"sux\", label : \"Sumerian\"},\n { value : \"swa\", label : \"Swahili\"},\n { value : \"swe\", label : \"Swedish\"},\n { value : \"syc\", label : \"Classical Syriac\"},\n { value : \"syr\", label : \"Syriac\"},\n { value : \"tah\", label : \"Tahitian\"},\n { value : \"tai\", label : \"Tai languages\"},\n { value : \"tam\", label : \"Tamil\"},\n { value : \"tat\", label : \"Tatar\"},\n { value : \"tel\", label : \"Telugu\"},\n { value : \"tem\", label : \"Temne; Time\"},\n { value : \"ter\", label : \"Terena\"},\n { value : \"tet\", label : \"Tetum\"},\n { value : \"tgk\", label : \"Tajik\"},\n { value : \"tgl\", label : \"Tagalog\"},\n { value : \"tha\", label : \"Thai\"},\n { value : \"tib\", label : \"Tibetan\"},\n { value : \"tig\", label : \"Tigré\"},\n { value : \"tir\", label : \"Tigrinya\"},\n { value : \"tiv\", label : \"Tiv\"},\n { value : \"tkl\", label : \"Tokelauan\"},\n { value : \"tlh\", label : \"Klingon; tlhIngan-Hol\"},\n { value : \"tli\", label : \"Tlingit\"},\n { value : \"tmh\", label : \"Tamashek\"},\n { value : \"tog\", label : \"Tonga (Nyasa)\"},\n { value : \"ton\", label : \"Tongan\"},\n { value : \"tpi\", label : \"Tok Pisin\"},\n { value : \"tsi\", label : \"Tsimshian\"},\n { value : \"tsn\", label : \"Tswana\"},\n { value : \"tso\", label : \"Tsonga\"},\n { value : \"tuk\", label : \"Turkmen\"},\n { value : \"tum\", label : \"Tumbuka\"},\n { value : \"tup\", label : \"Tupi languages\"},\n { value : \"tur\", label : \"Turkish\"},\n { value : \"tut\", label : \"Altaic languages\"},\n { value : \"tvl\", label : \"Tuvaluan\"},\n { value : \"twi\", label : \"Twi\"},\n { value : \"tyv\", label : \"Tuvinian\"},\n { value : \"udm\", label : \"Udmurt\"},\n { value : \"uga\", label : \"Ugaritic\"},\n { value : \"uig\", label : \"Uighur; Uyghur\"},\n { value : \"ukr\", label : \"Ukrainian\"},\n { value : \"umb\", label : \"Umbundu\"},\n { value : \"und\", label : \"Undetermined language\"},\n { value : \"urd\", label : \"Urdu\"},\n { value : \"uzb\", label : \"Uzbek\"},\n { value : \"vai\", label : \"Vai\"},\n { value : \"ven\", label : \"Venda\"},\n { value : \"vie\", label : \"Vietnamese\"},\n { value : \"vol\", label : \"Volapük\"},\n { value : \"vot\", label : \"Votic\"},\n { value : \"wak\", label : \"Wakashan languages\"},\n { value : \"wal\", label : \"Wolaitta; Wolaytta\"},\n { value : \"war\", label : \"Waray\"},\n { value : \"was\", label : \"Washo\"},\n { value : \"wel\", label : \"Welsh\"},\n { value : \"wen\", label : \"Sorbian languages\"},\n { value : \"wln\", label : \"Walloon\"},\n { value : \"wol\", label : \"Wolof\"},\n { value : \"xal\", label : \"Kalmyk\"},\n { value : \"xho\", label : \"Xhosa\"},\n { value : \"yao\", label : \"Yao\"},\n { value : \"yap\", label : \"Yapese\"},\n { value : \"yid\", label : \"Yiddish\"},\n { value : \"yor\", label : \"Yoruba\"},\n { value : \"ypk\", label : \"Yupik languages\"},\n { value : \"zap\", label : \"Zapotec\"},\n { value : \"zbl\", label : \"Blissymbols; Blissymbolics; Bliss\"},\n { value : \"zen\", label : \"Zenaga\"},\n { value : \"zha\", label : \"Zhuang; Chuang\"},\n { value : \"znd\", label : \"Zande languages\"},\n { value : \"zul\", label : \"Zulu\"},\n { value : \"zun\", label : \"Zuni\"},\n { value : \"zxx\", label : \"No linguistic content\"},\n { value : \"zza\", label : \"Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki\"}\n ];\n \n\n\n\nexport const history = {\n\n on_hand: 3,\n on_order: 2,\n peer_on_hand: [36, 20],\n peer_on_order: [4, 2],\n counts: [\n {\n key: \"Adj\",\n color: \"#C71585\",\n values: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n {\n key: \"Retn\",\n color: \"#9932CC\",\n values: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n },\n {\n key: \"Rcvd\",\n color: \"#228B22\",\n values: [0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 0]\n },\n {\n key: \"Sold\",\n color: \"#000000\",\n values: [0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0]\n },\n {\n key: \"Peer\",\n color: \"#A52A2A\",\n values: [0, 22, 0, 0, 0, 0, 0, 0, 5, 24, 11, 16, 7, 5, 2, 0, 0]\n }\n\n ]\n\n\n}","/*\n ---- Api ----\n Provides structure to all the rest requests\n*/\nimport Cookies from 'js-cookie';\n\n// Default path used if there is no cookie and no ENV variable\n// npm start & npm build do not set ENV variables\nconst defaultApi = \"https://devapi.bookmanager.com/\";\n// const defaultApi = \"https://tbraunapi.bookmanager.com/\";\n\nconst mode = process.env.REACT_APP_API || 'inherit';\nconst live = Cookies.get(\"l\") || \"false\";\n\n\nconst getApiPath = () => {\n // Get ENV variable from start and build scripts and set the path. \n \n let _path = \"\";\n switch (mode) {\n case \"dev\":\n _path = \"https://devapi.bookmanager.com/\"\n break;\n case \"staging\":\n _path = \"https://stagingapi.bookmanager.com/\"\n break;\n case \"live\":\n _path = \"https://api.bookmanager.com/\"\n break;\n default:\n _path = defaultApi;\n break;\n }\n return _path; \n}\n\nconst apiPath = (Cookies.get('api')) ? Cookies.get('api') : getApiPath();\n\n\nexport const apiGetPath = (_obj, _api) => {\n\n let path = apiPath + \"store/\" + _api; \n let _session_id = (Cookies.get(\"session_store_id\")) ? Cookies.get(\"session_store_id\") : \"\";\n let params = \"&store_id=\" + window.store_id + \"&session_id=\" + _session_id;\n Object.keys(_obj).forEach(element => {\n params += \"&\" + element + \"=\" + _obj[element];\n });\n path = path + \"?\" + params.substring(1, params.length);\n\n return path; \n}\n\n\nexport const apiDownload = (_obj, _api, _blank = true) => {\n\n let path = \"/download/store/\" + _api;\n\n let params = \"&store_id=\" + window.store_id;\n Object.keys(_obj).forEach(element => {\n params += \"&\" + element + \"=\" + _obj[element];\n });\n\n path = path + \"?\" + params.substring(1, params.length);\n\n console.log(path);\n\n if (_blank) {\n window.open(path, \"_blank\");\n } else {\n window.open(path);\n }\n\n}\n\n\n\nexport const apiCall = (_methodName, _args, _callback, api = \"store\", use_session = true, session_id = false, store_id = false) => {\n\n // put all the data into a form to post \n var form_data = new FormData();\n\n // TEST MULTISTORE 0\n\n if (store_id) {\n form_data.append(\"store_id\", store_id);\n } else {\n if (window.store_id) {\n form_data.append(\"store_id\", window.store_id);\n }\n }\n\n if (window.wamp_session_id) {\n form_data.append(\"wamp_session_id\", window.wamp_session_id);\n }\n\n if (session_id) {\n form_data.append(\"session_id\", session_id);\n } else {\n\n if (use_session) {\n form_data.append(\"session_id\", (Cookies.get(\"session_store_id\")) ? Cookies.get(\"session_store_id\") : \"\");\n } else {\n\n if (window.session_store_id) {\n form_data.append(\"session_id\", window.session_store_id);\n } else {\n form_data.append(\"session_id\", \"\");\n }\n\n }\n\n }\n\n form_data.append(\"log_url\", window.location.pathname);\n form_data.append(\"cts\", Date.now().toString());\n\n // MOSAIC\n // form_data.append(\"store_id\", 11);\n // if (use_session) {\n // form_data.append(\"session_id\", \"as_DE6pPYy_CUdSHETySoVORzJ7e\");\n // } else {\n // form_data.append(\"session_id\", \"\");\n // }\n\n\n if (_args) {\n for (var key in _args) {\n form_data.append(key, _args[key]);\n }\n }\n\n\n let _params = {\n method: 'POST',\n body: form_data\n }\n\n if(mode !== \"live\" && mode !==\"staging\" && live === \"true\"){\n _params.headers = {\"x-tbm-data\": \"l\"} \n }\n\n fetch((apiPath + api + \"/\" + _methodName), _params)\n .then(response => response.json())\n .then((r) => {\n // request is formatted, but there is an error\n if (r.error) {\n // is error\n if (r.error === \"reload\") {\n window.location.reload();\n } else {\n _callback(false, r)\n }\n\n } else {\n // is success\n _callback(\"success\", r)\n }\n\n }).catch((e) => {\n _callback(false, e)\n // is error\n });\n\n}\n\n\n","/*\n ---- conditional ----\n Html style tags for conditions - just for easy structure\n*/\n\nimport React from \"react\";\n\nexport default function conditional(){\n\n return false; \n}\n\nconditional.true = (props) =>{\n const {...other} = props; \n if(props.value){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}\n\nconditional.string = (props) =>{\n\n const {...other} = props; \n // is string and not empty\n if(typeof props.value === 'string' && props.value !== \"\"){\n return (<>{other.children})\n } else {\n return (<>);\n }\n\n}\n\nconditional.object = (props) => {\n\n const {...other} = props; \n // is object and not null\n if(typeof props.value === 'object' && !Array.isArray(props.value) && props.value !== null && !Object.keys(props.value).length === 0){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}\n\nconditional.array = (props) => {\n const {...other} = props; \n // is array and not empty\n if(Array.isArray(props.value) && props.value.length>0){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}\n\nconditional.match = (props) => {\n const {...other} = props; \n // matches expected\n if(props.value === props.check){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}","import React, { useState, useEffect } from \"react\";\nimport { Collapse, Drawer, Form, Tooltip, Switch, Menu, Dropdown, Row, Col, Space, Card, Checkbox, Anchor, Affix, Pagination, Typography, Divider, Input, Button, Radio, Select, Table, Skeleton } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport { DownOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport conditional from \"../tools/conditional\";\nimport { CloseOutlined } from '@ant-design/icons';\n\n\nexport default function PeerSales(props) {\n\n\n const { drawComponent = () => { }, setShowActivity = () => { }, isbn = \"\" } = props;\n\n const [results, setResults] = useState({ rows: [] })\n const [summary, setSummary] = useState({});\n const [loading, setLoading] = useState(true);\n const [locationGroups, setLocationGroups] = useState([])\n\n const [filters, setFilters] = useState({\n period: \"month\",\n summarize_province: false,\n location_group: (window.sitesettings.is_canadian) ? \"Canada\" : \"USA\",\n isbn: isbn\n })\n\n const getPeerSales = () => {\n setLoading(true)\n apiCall(\"title/getPeerSalesBreakdown\", filters, (_status, _result) => {\n if (_status) {\n // first row is summary data.. \n let _summary = _result.rows.shift();\n setSummary(_summary);\n setResults(_result);\n setLoading(false)\n }\n })\n }\n\n\n const getLocations = () => {\n apiCall(\"title/getLocationPickerData\", { isbn: filters.isbn }, (_status, _result) => {\n if (_status) {\n setLocationGroups(_result.sorted_keys.reverse());\n }\n })\n }\n\n useEffect(getLocations, []);\n\n\n\n useEffect(getPeerSales, [filters]);\n\n\n let columns = [];\n\n\n\n columns.push({ title: , width: \"5px\", dataIndex: \"blank\", key: \"blank\" });\n\n\n if (filters.summarize_province) {\n\n columns.push({\n title: \"\", dataIndex: \"flag\", className: \"cellBorder\", width: \"40px\", key: \"flag\", render: (e, f) => { return ({f.name}}> e.target.style.display = 'none'} style={{ \"maxWidth\": \"17px\", \"cursor\": \"pointer\" }} src={\"https://cdn1.bookmanager.com/i/flags/\" + f.country + \"_\" + f.province + \".png\"} /> {f.province}) }\n })\n\n // columns.push({\n // title: Prov / State, className: \"cellBorder\", dataIndex: \"name\", key: \"name\", render : (e) => {\n // return

\n // {e}}>{e}\n //
\n // }\n // })\n }\n\n // columns.push({ title: Name, className:\"cellBorder\", dataIndex: \"name\", key: \"name\" })\n\n // Add months procedurally\n\n\n\n for (let i = 12; i >= 0; i--) {\n let start = (filters.period === \"week\") ? moment().startOf(\"week\").add(-1, \"day\") : moment();\n let month = start.add(-i, filters.period).format((filters.period === \"month\") ? \"MMM\" : \"MMMD\");\n\n columns.push({ title: {month}, className: (i === 0 && filters.period !== \"week\") ? \"cellBorder\" : \"\", dataIndex: filters.period + i.toString(), key: filters.period + i.toString(), render: (e) => e || \"\" });\n }\n\n // Add Week bs\n if (filters.period === \"week\") {\n columns.push({ title: {moment().format(\"MMMD\")}, className: \"cellBorder\", dataIndex: \"week\", key: \"week\", render: (e) => { return {(e) ? e : \"\"} } })\n }\n\n // Add static columns\n columns.push({ title: Total, className: \"cellBorder\", dataIndex: \"total\", key: \"total\", render: (e) => { return {(e) ? e : \"\"} } })\n\n\n if (!filters.summarize_province) {\n columns.push({\n title: Price, className: \"cellBorder\", dataIndex: \"price\", key: \"price\", render: (e) => {\n return (e) ? {e.toString()} : \"\";\n }\n })\n }\n\n columns.push({\n title: OH, className: \"cellBorder\", dataIndex: \"onhand\", key: \"onhand\", render: (e) => {\n return
{(e) ? e : \"\"}
\n }\n })\n columns.push({\n title: OO, className: \"cellBorder\", dataIndex: \"onorder\", key: \"onorder\", render: (e) => {\n return
{(e) ? e : \"\"}
\n }\n })\n\n\n\n // Clone columns from summary\n let summary_columns = [...columns];\n // drop the first three columns()\n summary_columns.shift();\n summary_columns.shift();\n summary_columns.shift();\n if (filters.summarize_province) {\n summary_columns.shift();\n }\n\n const parseData = () => {\n\n if (loading) {\n return ([]);\n }\n\n return results.rows.map((item, index) => {\n\n let m = { ...item };\n\n for (let i = 12; i >= 0; i--) {\n m[filters.period + i.toString()] = m.values[i];\n }\n\n return m;\n\n\n })\n }\n\n\n const parseSummary = () => {\n\n if (loading) {\n return ([]);\n }\n\n let _summary = [{ ...summary }];\n return _summary.map((item, index) => {\n\n let m = { ...item };\n for (let i = 12; i >= 0; i--) {\n m[filters.period + i.toString()] = m.values[i];\n }\n\n return m;\n\n\n })\n\n }\n\n\n\n\n const drawHeader = () => {\n return (\n <>\n
\n
\n
\n \n \n setFilters({ ...filters, \"summarize_province\": e.target.checked })}>Summarize by province / state\n\n \n\n \n \n
\n
\n setFilters({ ...filters, \"period\": e.target.value })} buttonStyle=\"solid\">\n Monthly\n Weekly\n Daily\n \n \n
\n
\n
\n
\n
\n \n )\n }\n\n\n\n\n const menu = () => {\n return (\n setFilters({ ...filters, \"location_group\": e.key })}>\n {locationGroups.map((item, index) => {\n return ({item})\n })}\n \n )\n }\n\n\n\n return (\n <>\n\n
\n
Peer Sales
\n\n {/* drawHeader()}\n dataSource={parseSummary()}\n pagination={false}\n onExpand={(e) => { return false; }}\n /> */}\n\n drawHeader()}\n loading={loading}\n className={\"peerTable bc\"}\n style={{ \"border\": \"1px solid\", \"borderLeft\": \"6px solid\" }}\n dataSource={parseSummary().concat(parseData())}\n scroll={{ y: 240 }}\n pagination={false}\n onExpand={(e) => { return false; }}\n\n />\n\n \n )\n\n\n return (<>\n\n\n\n
\n\n \n \n
\n\n {(loading) ? \"Total\" : summary.name}\n
\n\n
\n { return false; }}\n />\n\n
\n\n\n
\n
\n\n {\"Stores\"}\n
\n\n\n
\n { return false; }}\n\n />\n
\n\n\n {/* 10)}>\n
\n setFilters({ ...filters, \"offset\": (e - 1) * f, \"limit\": f })} total={parseData().length} showSizeChanger />\n
\n
\n
*/}\n\n {/* \n \n */}\n
\n\n\n\n\n
\n\n\n\n )\n}","/*\n ---- Session ----\n Acts like a global varable, accessible from any component\n*/\n\nimport React from 'react';\nlet PrefsContext;\nlet { Provider } = (PrefsContext = React.createContext())\nexport const usePrefs = () => React.useContext(PrefsContext)\n\n\nexport default function Prefs(props) { \n // wrap component in a provider. \n return {props.children}\n}\n\n\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAGQCAIAAACbF8osAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkMzNjAxMjUzRTY1RTExRUI5NjA2Q0Y2MEUyNjk3QUMwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkMzNjAxMjU0RTY1RTExRUI5NjA2Q0Y2MEUyNjk3QUMwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzM2MDEyNTFFNjVFMTFFQjk2MDZDRjYwRTI2OTdBQzAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzM2MDEyNTJFNjVFMTFFQjk2MDZDRjYwRTI2OTdBQzAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7aIcAxAAALj0lEQVR42uzc+1NT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\"","/*\n ---- conditional ----\n Html style tags for conditions - just for easy structure\n*/\n\nimport React from \"react\";\n\nexport default function conditional(){\n\n return false; \n}\n\nconditional.true = (props) =>{\n const {...other} = props; \n if(props.value){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}\n\nconditional.string = (props) =>{\n\n const {...other} = props; \n // is string and not empty\n if(typeof props.value === 'string' && props.value !== \"\"){\n return (<>{other.children})\n } else {\n return (<>);\n }\n\n}\n\nconditional.object = (props) => {\n\n const {...other} = props; \n // is object and not null\n if(typeof props.value === 'object' && !Array.isArray(props.value) && props.value !== null && !Object.keys(props.value).length === 0){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}\n\nconditional.array = (props) => {\n const {...other} = props; \n // is array and not empty\n if(Array.isArray(props.value) && props.value.length>0){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}\n\nconditional.match = (props) => {\n const {...other} = props; \n // matches expected\n if(props.value === props.check){\n return (<>{other.children})\n } else {\n return (<>);\n }\n}","/*\n ---- Session ----\n Acts like a global varable, accessible from any component\n*/\n\nimport React from 'react';\nlet SessionContext;\nlet { Provider } = (SessionContext = React.createContext())\nexport const useSession = () => React.useContext(SessionContext)\n\n\nexport default function Session(props) { \n // wrap component in a provider. \n return {props.children}\n}\n\n\n","\nimport React, { useState, useEffect } from \"react\";\nimport { Button, Divider, Typography, Table, Modal, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport { bmDate } from \"../../utils/Utils\";\n\nexport default function CatalogueCount(props) {\n\n const { isbn = \"\", count = 0 } = props;\n const [results, setResults] = useState([])\n const [loading, setLoading] = useState(false);\n const [visible, setVisible] = useState(false);\n const [fetched, setFetched] = useState(false);\n\n\n const linkOut = (_id) => {\n window.open(\"/purchasing/browse/filter/x/\" + _id + \"/v/sequence\", \"_blank\");\n }\n\n const fetchCatalogues = () => {\n \n setVisible(true);\n if(fetched){return; }\n setLoading(true);\n apiCall(\"title/getCatalogues\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setFetched(true);\n } else {\n message.error(_result.error);\n }\n setLoading(false);\n })\n }\n\n const drawCatalogues = () => {\n\n return (\n setVisible(false)} footer={null} visible={visible}>\n
\n\n \n
Catalogues ({count.toString()})
\n \n \n
\n

Catalogues and lists that contain this item:

\n\n \n
\n
\n \n
\n
\n
\n
\n )\n }\n\n\n const columns = [\n { title: Supplier, width: 60, dataIndex: 'vendor', key: 'vendor' },\n // { title: Supplier, width: 60, dataIndex: 'vendor', key: 'vendor' },\n {\n title: Name, dataIndex: 'name', key: 'name', render: (e, f) => {\n return (e) ? linkOut(f.id)} >{e} : \"\";\n }\n },\n {\n title: Published, width: 85, dataIndex: 'posted', key: 'posted', render: (e) => {\n return (e) ? {bmDate(e * 1000)} : \"\"\n }\n },\n { title: Category, width: 85, dataIndex: 'category', key: 'category' },\n ]\n\n\n\n if (!count) {\n return <>;\n }\n\n return (\n <>\n {drawCatalogues()}\n \n \n )\n\n\n\n\n\n\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Form, Space, Switch, Select, Input, Radio, Badge } from \"antd\";\nimport conditional from \"../tools/conditional\";\nimport { apiCall } from \"../utils/Api\";\n\nexport default function CommentOptions(props) {\n\n const {\n isbn = false,\n titlelist_id = false,\n comment_id = false,\n isnew = false,\n editOptions = () => { },\n setEditOptions = () => { }\n } = props;\n\n const colors = {\n \"personal\": \"#d1b3e5\",\n \"webstore\": \"#f47ddc\",\n \"clients\": \"#fa9050\",\n \"booksellers\": \"#90EE90\",\n \"staff\": \"#ffef00\",\n \"visitors\": \"#70e2ff\",\n \"everyone\": \"#def1f6\",\n \"unknown\": \"#bad4e1\",\n }\n\n const [loading, setLoading] = useState(true);\n\n const getEditOptions = (_new = false) => {\n\n let args = {}\n if (isbn) { args.isbn = isbn; }\n\n if(!isnew){\n if (comment_id) { args.comment_id = comment_id; }\n } else {\n if (editOptions.titlelist_id){\n args.titlelist_id = editOptions.titlelist_id;\n }\n }\n\n if (titlelist_id) { args.titlelist_id = titlelist_id; }\n \n\n apiCall(\"comment/getEditOptions\", args, (_status, _result) => {\n if (_status) {\n setEditOptions(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getEditOptions, [isnew]);\n\n const drawAuthor = () => {\n return (\n \n \n \n )\n }\n\n const drawSharedWith = () => {\n return (\n \n \n \n );\n }\n\n const drawExpires = () => {\n return (\n \n setEditOptions({ ...editOptions, \"expiry_type\": e.target.value })}>\n \n \n With list\n \n In  \n \n setEditOptions({ ...editOptions, \"expiry_date\": e.target.value })} value={(editOptions.expiry_date) ? editOptions.expiry_date : 90} disabled={(!editOptions.visible_anywhere && (editOptions.titlelist_id))} style={{ \"width\": \"60px\" }} size=\"small\" />\n \n   day(s)\n \n No expiry\n \n \n \n \n )\n }\n\n const drawListLimit = () => {\n return (\n \n \n setEditOptions({ ...editOptions, \"visible_anywhere\": (!e) })} size=\"small\" />\n \n \n )\n }\n\n if (loading) {\n return (<>)\n }\n\n return (\n
\n {drawAuthor()}\n {drawListLimit()}\n {drawSharedWith()}\n {drawExpires()}\n
\n )\n\n}","/*\n ---- Html ----\n Displays HTML\n*/\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nfunction Expand(props) {\n\n \n const { html, color=\"#000\", allowbreaks = false, className=\"clamp3\" } = props;\n\n const [expand, setExpand] = useState(true)\n const ref = useRef();\n\n const getLineCount = (element) => {\n const lineHeight = parseFloat(window.getComputedStyle(element).lineHeight);\n const height = element.clientHeight;\n const lineCount = Math.round(height / lineHeight);\n return lineCount;\n }\n\n\n useEffect(() => {\n\n let _count = getLineCount(ref.current);\n if(_count > 3){\n setExpand(false);\n }\n }, [])\n\n \n \n const display = () => {\n return { __html: html };\n }\n\n return (<>\n
\n{(!expand && )}\n );\n\n}\n\nexport default Expand;","import React, { useState } from \"react\";\nimport { Row, Col, Form, Modal, Typography, Divider, Space, Button, Input, message } from \"antd\";\nimport moment from \"moment\";\nimport { EditOutlined } from '@ant-design/icons';\nimport { adjustColor } from \"../utils/Utils\";\nimport conditional from \"../tools/conditional\";\nimport { apiCall } from \"../utils/Api\";\nimport CommentOptions from \"./CommentOptions\";\nimport Expand from \"../utils/Expand\";\n\nconst colors = {\n \"personal\": \"#d1b3e5\",\n \"webstore\": \"#f47ddc\",\n \"clients\": \"#fa9050\",\n \"booksellers\": \"#90EE90\",\n \"staff\": \"#ffef00\",\n \"visitors\": \"#70e2ff\",\n \"everyone\": \"#def1f6\",\n \"unknown\": \"#bad4e1\",\n}\n\nconst drawShareWith = (_key) => {\n let ret;\n switch (_key) {\n case \"webstore\":\n ret = \"biz\";\n break;\n case \"clients\":\n ret = \"rep's clients\";\n break;\n default:\n ret = _key;\n }\n return ret;\n}\n\n\nexport default function Comment(props) {\n\n const {\n isbn = \"\",\n opennew = false,\n callback = () => { }\n } = props;\n\n const [data, setData] = useState(props.data);\n const [isnew, setIsNew] = useState(opennew);\n const [editOptions, setEditOptions] = useState({});\n const [modalVisible, setModalVisible] = useState()\n \n const deleteComment = (_comment_id) => {\n apiCall(\"comment/delete\", { comment_id: _comment_id }, (_status, _result) => {\n if (_status) {\n message.success(\"Comment deleted.\");\n callback();\n } else {\n message.error(_result.error);\n }\n setModalVisible(false);\n })\n }\n\n const saveComment = (f) => {\n\n let fields = {\n comment: data.text,\n shared_with: editOptions.current_shared_with,\n expiry_type: editOptions.expiry_type,\n visible_anywhere: editOptions.visible_anywhere,\n as_author: editOptions.current_author,\n expiry_days: editOptions.expiry_date,\n titlelist_id: editOptions.titlelist_id\n }\n\n if (isbn) {\n fields.isbn = isbn;\n }\n\n // Add id for if not new\n if (!isnew) {\n fields.comment_id = data.id;\n }\n\n // drop days if not set\n if (!editOptions.expiry_date) {\n delete fields.expiry_days;\n }\n\n // drop days if expiry_type isn't days \n if (editOptions.expiry_type !== 1) {\n delete fields.expiry_days;\n }\n\n if (!editOptions.titlelist_id) {\n delete fields.titlelist_id;\n }\n\n let method = (isnew) ? \"comment/add\" : \"comment/edit\";\n\n apiCall(method, fields, (_status, _result) => {\n if (_status) {\n callback();\n message.success(\"Comment saved successfully.\");\n close();\n }\n })\n\n }\n\n const createNew = () => {\n setData({ ...data, \"text\": \"\" });\n setIsNew(true);\n }\n\n const convertHTML = (_html) =>{\n let _ret = _html.replace(//g, '');\n _ret = _html.replace(/<\\/strong>/g, '');\n _ret = _html.replace(//g, '');\n _ret = _html.replace(/<\\/em>/g, '');\n\n console.log(_ret);\n return _ret;\n }\n\n const revertHTML = (_html) =>{\n let _ret = _html.replace(//g, '');\n _ret = _html.replace(/<\\/b>/g, '');\n _ret = _html.replace(//g, '');\n _ret = _html.replace(/<\\/i>/g, '');\n return _ret;\n }\n\n const drawEdit = () => {\n return (\n <>\n
saveComment(f)} layout=\"vertical\">\n \n \n \n {/* setData({ ...data, \"text\": convertHTML(e) })} /> */}\n setData({ ...data, \"text\": e.target.value })} rows={8} showCount maxLength={2000}>\n \n \n \n \n \n \n \n \n \n \n
\n \n\n \n {((!isnew) && )}\n \n \n
\n
\n \n \n )\n }\n\n const open = () => {\n if (props.opennew) {\n setIsNew(true)\n }\n setData(props.data);\n setModalVisible(true);\n }\n\n const close = () => {\n setIsNew(false);\n setModalVisible(false);\n }\n\n return (\n <>\n close()} visible={modalVisible}>\n {(isnew) ? \"New\" : \"Edit\"} Comment\n \n {drawEdit()}\n \n open()}>{props.children}\n \n );\n}\n\n\n// When you have the data, and just want to display the card\nComment.Display = (props) => {\n\n const drawEditLink = () => {\n return (<> Visible to {drawShareWith(data.shared_with)} {(data.editable) ? : \"\"})\n }\n\n const { data, isbn, callback = () => { } } = props;\n return (\n <>\n
\n
{data.author}
\n
\n
{moment(data.date * 1000).format(\"MMM Do, YYYY\")} -\n {(data.editable) ? {drawEditLink()} : drawEditLink()}\n
\n
\n \n )\n}","import React, { useState, useEffect } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport Comment from \"./Comment\";\nimport { Button, message, Space } from \"antd\";\nimport { useSession } from \"../utils/Session\";\nexport default function Comments(props) {\n\n const { isbn = \"\", row = false, comments = false } = props;\n const [results, setResults] = useState((comments) ? comments : []);\n const [session, setSession] = useSession(); \n\n \n\n const getComments = () => {\n\n let request = {};\n request.isbn = isbn;\n if (props.titlelist_id) {\n request.titlelist_id = props.titlelist_id;\n }\n\n apiCall(\"title/getComments\", request, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n })\n }\n\n \n\n\n const highlight = () => {\n\n let obj = {\n isbn : isbn,\n comment : \"*Highlight\",\n shared_with : 1,\n expiry_type : 1,\n expiry_days : 90,\n as_author : \"personal\"\n }\n\n if (props.titlelist_id) {\n obj.titlelist_id = props.titlelist_id;\n }\n\n apiCall(\"comment/add\", obj, (_status, _result) => {\n if(_status){\n message.success(\"Highlight Added\");\n getComments(); \n } else {\n message.error(_result.error);\n }\n })\n }\n\n\n const drawComments = () => {\n if (results.length < 1) {\n return (<>)\n }\n return results.map((item, index) => {\n return (\n
\n \n {((index + 1) !== results.length) && <>
}\n
\n )\n })\n }\n\n if (row) {\n return (\n <>\n
\n \n \n \n \n {(session.is_store && )}\n \n
\n
\n
\n
\n
\n {drawComments()}\n
\n
\n \n )\n }\n\n return (<>\n
\n
\n {drawComments()}\n
\n
\n \n )\n\n\n\n}","import React from 'react';\n\n\nconst Icon = ({ className, ...props }) => (\n \n \n\n {/* */}\n \n);\n\n\nconst EyeIcon = ({ color, ...props }) => (\n \n);\n\nexport default EyeIcon;","import { Button, Divider, Input, Popover } from \"antd\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { PlusSquareFilled } from '@ant-design/icons';\nimport { getMemory, saveMemory } from \"../utils/Utils\";\n\nexport default function GroupPicker(props) {\n\n const { show_plus_circle = false } = props;\n const inputRef = useRef(null);\n const {\n disabled = false,\n value = 0,\n onChange = () => { },\n } = props;\n\n const [val, setVal] = useState((value) ? value : \"\");\n const [hover, setHover] = useState(false);\n\n const memory = getMemory(\"grouppicker\");\n const defaults = [\"O\", \"R\", \"B\", \"F\", \"S\", \"W\"];\n\n let mergedSet = new Set([...memory, ...defaults]);\n let presets = Array.from(mergedSet).slice(0, 6);\n // presets = presets.sort();\n\n useEffect(() => {\n setVal(value)\n }, [value]);\n\n const change = (_v) => {\n handleHover(false)\n addMemory(_v);\n onChange(_v);\n }\n\n const addMemory = (_val) => {\n if (_val.length === 1) {\n saveMemory(\"grouppicker\", _val)\n }\n }\n\n const handleVal = (_e, _update = false, _blur = false) => {\n\n var regex = /^[0-9a-zA-Z]+$/;\n let valid = regex.test(_e.target.value);\n let v = _e.target.value.toUpperCase();\n if (!valid) { v = \"\"; }\n\n if (_blur && (v == value)) {\n // if value matches on blur, don't update (already up to date)\n _update = false;\n }\n if (_update) {\n // onChange will set the local val pointless to set it twice\n addMemory(v);\n handleHover(false);\n change(v);\n } else {\n setVal(v);\n }\n };\n\n\n const handleHover = (_v) => {\n if (_v !== hover) {\n setHover(_v);\n }\n }\n\n const NumBtn = (props) => {\n const { num = 0 } = props\n return ()\n }\n\n const MemBtn = (props) => {\n const { index = 0 } = props;\n let _val = presets[index];\n return ()\n }\n\n const handleMouseLeave = () => {\n if (inputRef.current) {\n inputRef.current.blur();\n }\n };\n\n const stores = window.sitesettings.stores.map((item, index) => { return item.store_number.toString() })\n const groups = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"];\n\n\n const handleKeyPress = (_e) => {\n\n if (_e.key === 'Enter') {\n handleVal(_e, true);\n }\n };\n\n\n const segmentArray = (_arr, _size) => {\n\n const segments = Array.from({ length: Math.ceil(_arr.length / _size) }, (v, i) =>\n _arr.slice(i * _size, i * _size + _size)\n );\n\n return (\n
\n {segments.map((_child, _index) => (\n
\n {_child.map((_chitem, _chindex) => (\n \n ))}\n
\n ))}\n
\n );\n }\n\n\n const content = (\n <>\n
handleMouseLeave()} style={{ \"padding\": \"3px\" }}>\n\n {((stores.length > 1) && segmentArray(stores, 6))}\n \n\n {segmentArray(groups, 6)}\n \n\n
\n
\n \n \n \n \n \n \n
\n
\n
\n \n )\n\n return (\n <>\n \n\n\n {(show_plus_circle &&
    
)}\n {(!show_plus_circle &&\n handleKeyPress(e)}\n mouseEnterDelay={0}\n onBlur={(e) => handleVal(e, true, true)}\n onFocus={(e) => e.target.select()}\n onChange={(e) => handleVal(e)}\n value={(val != false) ? val : \"\"}\n \n style={{\n \"width\": \"30px\",\n \"fontSize\": \"11px\",\n \"height\": \"23px\",\n \"marginTop\": \"3px\",\n \"padding\": \"0px 5px\",\n \n }}\n className={(disabled) ? \"tinyInput groupBG\" : \"tinyInput groupBG\"} />\n )}\n
\n \n )\n}","/*\n ---- Html ----\n Displays HTML\n*/\n\nimport React from \"react\";\n\nfunction Html(props) {\n\n const { html, allowbreaks = false, className=\"html htmlcolor\" } = props;\n\n const display = () => {\n return { __html: html };\n }\n\n return (<>
);\n\n}\n\nexport default Html;","import React, { useState, useEffect } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport { Row, Col, Typography, Image, Divider } from \"antd\";\nimport conditional from \"../tools/conditional\";\nimport Html from \"../utils/Html\";\nexport default function BusinessContactInfo(props) {\n\n const { id } = props;\n const [results, setResults] = useState({\n id: \"\",\n san: \"\",\n name: \"\",\n acct: \"\",\n addr1: \"\",\n addr2: \"\",\n city: \"\",\n prov: \"\",\n country: \"\",\n postal: \"\",\n phone: \"\",\n phone2: \"\",\n tollfree: \"\",\n fax: \"\",\n email: \"\",\n url: \"\",\n notes: \"\",\n categories: [],\n changes: [],\n webstore: \"\",\n edit: false,\n approvedText: \"\",\n logo_id: null\n })\n const getContact = () => {\n\n apiCall(\"business_directory/getContact\", { contact_id: id }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n })\n }\n\n useEffect(getContact, [id])\n\n function lineBreakToBr(inputString) {\n if(typeof inputString !== 'string'){\n return \"\";\n }\n const lineBreakRegex = /(\\r\\n|\\n)/g;\n // Replace line breaks with
tags\n const resultString = inputString.replace(lineBreakRegex, '
');\n return resultString;\n }\n\n\n\n const drawCard = () => {\n\n // handle bad data - websites without prefix\n let url = \"\";\n if (results.url) {\n if (results.url.substr(0, 4) !== \"http\") {\n url = \"https://\" + results.url;\n } else {\n url = results.url;\n }\n }\n\n return (\n <>\n \n \n
\n
\n {(results.logo_id &&\n
\n event.target.style.display = 'none'} />\n event.target.style.display = 'none'} />\n
\n )}\n \n
\n \n
\n \n {(results.url && Website: {url})}\n {(results.phone && Phone: {results.phone})}\n {(results.phone2 && Phone: {results.phone2})}\n {(results.tollfree && Toll Free: {results.tollfree})}\n {(results.fax && Fax: {results.fax})}\n \n
\n \n {results.name}\n \n
\n \n
\n \n {results.addr1} {((results.addr2) &&
{results.addr2}
)}
\n
\n \n {results.city}, {results.prov} {results.country}
\n
\n
\n \n \n \n \n \n
\n \n
\n\n\n\n \n )\n\n }\n\n return (\n <>\n \n {drawCard()}\n {/* ... */}\n \n {/*
{JSON.stringify(result, null, 2)}
*/}\n \n );\n}","import React, {useState} from \"react\";\nimport { Drawer, Modal } from \"antd\";\n\nexport default function Overlay(props) {\n\n const { maskClosable=true, component, width=1024, inline = false, auto_open = false, callback = () => {}} = props;\n const [modalVisible, setModalVisible] = useState(auto_open);\n\n const close = () =>{\n callback(); \n setModalVisible(false);\n }\n\n return (\n <>\n \n {React.cloneElement(component, { close: close })}\n \n \n
{ e.preventDefault(); e.stopPropagation(); setModalVisible(true)}}> {props.children}
\n \n );\n\n}","\nimport React, {useState, useEffect} from \"react\";\nimport { Checkbox, Space, Select, Button } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport { useSession } from \"../utils/Session\";\nimport { saveMemory } from \"../utils/Utils\";\n\n\nexport default function QuickPick(props) {\n\n const { supplier = \"\", } = props;\n const [session, setSession] = useSession();\n\n let checked = \"\";\n let group = \"O\";\n\n const stores = window.sitesettings.stores.map((item, index) => { return item.store_number.toString() })\n const groups = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"];\n\n session.quick_picks.forEach(element => {\n if (element.supplier === supplier) {\n checked = \"checked\";\n group = element.group;\n }\n });\n\n const hash = str => {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash &= hash; // Convert to 32bit integer\n }\n return new Uint32Array([hash])[0].toString(36);\n };\n\n const toggleQuickPick = (_add, _grp) => {\n apiCall((_add) ? \"store/addQuickPick\" : \"store/removeQuickPick\", { supplier: supplier, group: _grp }, (_status, _result) => {\n if (_status) {\n setSession({ ...session, \"quick_picks\": _result.quick_picks })\n }\n })\n }\n return (\n \n toggleQuickPick(e.target.checked, group)} />\n \n \n );\n}","import { CaretDownOutlined, CaretUpOutlined, CopyOutlined, PlusCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';\nimport { CloseOutlined } from '@ant-design/icons';\nimport { Badge, Button, Card, Checkbox, Col, DatePicker, Divider, Dropdown, Menu, Popconfirm, Radio, Select, Space, Statistic, Table, Tabs, Tag, Tooltip, Typography } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\n\nimport GroupPicker from '../tools/GroupPicker.js';\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../utils/conditional.js\";\nimport { usePrefs } from \"../utils/Prefs\";\nimport { useSession } from \"../utils/Session\";\nimport { getMemory, groupSort } from \"../utils/Utils\";\nimport { drawDeliveryTime } from \"../utils/Utils\";\nimport BusinessContactInfo from \"./BusinessContactInfo\";\nimport Overlay from \"./Overlay\";\nimport QuickPick from \"./QuickPick\";\n\nexport default function Pubstock(props) {\n\n const { want_store = true, wrap = false, title_suppliers = false, updatePrice = () => { }, isbn, is_order = false, selectSupplier, drawComponent = () => { }, price = \"\", list_price_usa = \"\", show_stores = false } = props;\n\n const [session, setSession] = useSession();\n const [suppliers, setSuppliers] = useState((title_suppliers) ? title_suppliers : []);\n const [bm, setBM] = useState({ class_1: \"\" });\n const [stores, setStores] = useState([]);\n const [prefs, setPrefs] = usePrefs();\n const groups = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"];\n\n if (!show_stores) {\n moment.updateLocale('en', {\n relativeTime: {\n future: \"in %s\",\n past: \"%s \",\n s: \"a sec ago\",\n m: \"a min ago\",\n mm: \"%d min ago\",\n h: \"an hour ago\",\n hh: \"%d hours ago\",\n d: \"a day ago\",\n dd: \"%d days ago\",\n M: \"a month ago\",\n MM: \"%d months ago\",\n y: \"a year ago\",\n yy: \"%d years ago\"\n }\n });\n } else {\n moment.updateLocale('en', {\n relativeTime: {\n future: \"+%s\",\n past: \"%s\",\n s: \"1s\",\n m: \"1m\",\n mm: \"%dm\",\n h: \"1h\",\n hh: \"%dh\",\n d: \"1d\",\n dd: \"%dd\",\n M: \"1m\",\n MM: \"%dm\",\n y: \"1y\",\n yy: \"%dy\"\n }\n });\n\n }\n\n\n\n\n ///i/nocover-120.png\n const getPubstock = () => {\n\n if (title_suppliers) {\n return;\n }\n\n apiCall(\"title/getPubstock\", { isbn: isbn, want_store: want_store, want_supplier: true, want_bm_data: true }, (_status, _result) => {\n if (_status) {\n setSuppliers(addKeys(_result.suppliers));\n setStores(addKeys(_result.stores));\n }\n })\n }\n\n useEffect(getPubstock, [isbn]);\n\n\n const ColumnHelp = (props) => {\n\n return (\n \n {props.children}\n \n )\n }\n\n const drawOOToolTip = (_str) => {\n\n let _arr = [\n \"ITO - Import To Order: must be imported, taking at least 2-6 weeks to get stock.\",\n \"Qwk - Quick: not stocked, but can get stock in less than 2 weeks.\",\n \"POD - Print On Demand: copies printed on demand.\",\n \"QPOD - Quick Print On Demand: copies printed on demand the same day.\",\n \"RP - Reprinting: the book is being reprinted by the publisher.\",\n \"NYR - Not Yet Received/Published: not yet received by the wholesaler, or published by the publisher.\",\n \"TOS - Temporarily out of stock: item will be in stock shortly.\",\n \"BOO - 'Backorder Only' title available as special order. ETA unknown.\",\n \"Mgd - Managed title: quantities shipped are managed manually\"\n ]\n\n return (\n \n
Non-numeric OO pubstock codes.
\n
\n
\n \n {_arr.map(item => {\n return (
{item}
)\n })}\n
\n
\n }>\n {_str}\n \n )\n }\n\n const drawOO = (_code) => {\n\n let msg = \"\"\n switch (_code) {\n\n case \"ITO\":\n msg = <>Import To Order
Must be imported, taking at least 2-6 weeks to get stock.
\n break;\n\n case \"Qwk\":\n msg = <>Quick
Not stocked, but can get stock in less than 2 weeks.
\n break;\n\n case \"LOW\":\n msg = <>LOW
Stock onhand is relatively low. Item may get backordered/cancelled.
\n break;\n\n case \"POD\":\n msg = <>Print On Demand
Copies printed on demand.
\n break;\n\n case \"QPOD\":\n msg = <>Quick Print On Demand
Copies printed on demand the same day.
\n break;\n\n case \"RP\":\n msg = <>Reprinting
The book is being reprinted by the publisher.
\n break;\n\n case \"NYR\":\n msg = <>Not Yet Received / Published
Not received by the wholesaler or published by the publisher.
\n break;\n\n case \"TOS\":\n msg = <>Temporarily out of stock
Item will be in stock shortly.
\n break;\n\n case \"BOO\":\n msg = <>Backorder Only
Title available as a special order. ETA unknown.
\n break;\n\n case \"Mgd\":\n msg = <>Managed Title
Quantities shipped are managed manually.
\n break;\n\n }\n\n if (msg) {\n return ({_code})\n }\n\n return _code;\n\n }\n\n\n const suppliers_columns = [\n\n {\n title: , key: 'flag', width: \"30px\", dataIndex: 'flag', render: (e, f) => {\n return <>{getFlag(f.country)};\n }\n },\n // {\n // title: Country, key: 'country', sorter: { compare: (a, b) => a.country.localeCompare(b.country) }, dataIndex: 'country', render: (e) => {\n // return <>{e};\n // }\n // },\n {\n title:
Suplr
, key: 'acct', dataIndex: 'acct', render: (e, f) => {\n // return
{e}
\n\n return Contact
}>{e}
;\n\n }\n },\n // {\n // title: Supplier, className: \"nowrap\", key: 'title', dataIndex: 'title', render: (e, f) => {\n // return expandCell(f)}>{e}\n // }\n // },\n\n {\n title: O/H, key: 'onhand', dataIndex: 'onhand', render: (e) => {\n\n return (e) ? {e.toString()} : \"\"\n\n }\n },\n {\n title: {drawOOToolTip(\"O/O\")}, key: 'onorder', dataIndex: 'onorder', render: (e) => {\n return (e) ? {drawOO(e)} : \"\"\n }\n },\n\n { title: Price , key: 'supplier_price', dataIndex: 'supplier_price' },\n { title: % , key: 'discount', dataIndex: 'discount' },\n { title: Returnability codes:
Y = returnable
N = non-returnable
C = may be returnable, but conditions are applied. Contact vendor for details.} >Rtrn
, key: 'returnable', dataIndex: 'returnable' },\n { title: As of, key: 'as_of', dataIndex: 'as_of', render: (e) => { return (e) ? moment(e * 1000).fromNow() : \"\" } },\n\n\n ]\n\n\n\n // \"onhand\": \"7\",\n // \"onoorder\": \"\",\n // \"province\": \"BC\",\n // \"city\": \"Kelowna\",\n // \"store_acct\": \"1677004\",\n // \"store_name\": \"Mosaic Books\",\n // \"asof\": 1625849949,\n // \"price\": \"$32.95\"\n\n\n\n // E77E21 4F9818\n\n // price,oh,oo,prov,name,city,asof \n const store_columns = [\n\n\n\n // { title: Account, key: 'store_acct', dataIndex: 'store_acct' },\n\n {\n title:
Name
, width: \"200px\", key: 'store_name', dataIndex: 'store_name', render: (e, f) => {\n return Contact
}>{e}
;\n },\n sorter: {\n compare: (a, b) => a.store_name.localeCompare(b.store_name)\n },\n },\n\n {\n title: Price, key: 'price', dataIndex: 'price',\n sorter: {\n compare: (a, b) => a.price > b.price,\n },\n\n render: (e) => {\n return (e === \"not shared\") ? \"---\" : e.replace(\"$\", \"\");\n }\n },\n {\n title: O/H, width: \"40px\", key: 'onhand', dataIndex: 'onhand', render: (e) => {\n return (e) ? {e.toString()} : \"\"\n }\n },\n {\n title: O/O, width: \"40px\", key: 'onorder', dataIndex: 'onorder', render: (e) => {\n return (e) ? {e.toString()} : \"\"\n }\n },\n\n {\n title: Prov, key: 'province', dataIndex: 'province',\n\n sorter: {\n compare: (a, b) => a.province.localeCompare(b.province)\n }\n\n },\n\n {\n title:
City
, key: 'city', width: \"120px\", dataIndex: 'city', render: (e) => {\n return {e}}>
{e}
\n },\n sorter: {\n compare: (a, b) => a.city.localeCompare(b.city)\n }\n },\n\n\n { title: As of, key: 'as_of', dataIndex: 'as_of', render: (e) => { return (e) ? moment(e * 1000).fromNow() : \"\" } },\n\n ]\n\n\n const getFlag = (_country) => {\n\n let flag = \"https://cdn1.bookmanager.com/i/CA.png\"\n switch (_country) {\n\n case \"Canada\":\n flag = \"CA\"\n break;\n\n case \"United Kingdom\":\n flag = \"CA\"\n break;\n\n case \"USA\":\n flag = \"US\"\n break;\n\n default:\n flag = false\n break;\n\n }\n\n return (flag) ? : <>\n\n\n }\n\n\n const [expanded, setExpanded] = useState([]);\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const drawChildTable = (_record) => {\n\n return ();\n return (
{JSON.stringify(_record, null, 2)}
)\n return ([TODO] Add Store / Supplier Details )\n }\n\n const [toggle, setToggle] = useState(false)\n\n\n const ftr = (_arr, _priority, _location) => {\n return _arr.filter(item => item.priority === _priority && item.country === _location).sort((a, b) => {\n return a.acct.localeCompare(b.acct);\n });\n }\n\n\n const countMatches = (arr1, arr2) => {\n let count = 0;\n for (let i = 0; i < arr1.length; i++) {\n if (arr2.includes(arr1[i])) {\n count++;\n }\n }\n return count;\n }\n\n\n const parseSuppliers = (_count = false, _toggle = toggle) => {\n let _s = [...suppliers];\n let _main = [];\n let _secondary = [];\n let _quickpicks = [];\n let _qps = session.quick_picks.reduce((a, { supplier }) => {\n if (supplier) a.push(supplier);\n return a;\n }, []);\n\n if (_qps.length > 0 && !_count) {\n _qps.forEach(item => {\n if (!_s.find(sup => sup.acct === item)) {\n _quickpicks.push({ acct: item })\n } else {\n _quickpicks.push(_s.find(sup => sup.acct === item))\n _s = _s.filter(sup => sup.acct !== item);\n }\n })\n }\n\n\n if (window.sitesettings.is_canadian) {\n // Canadian order\n _main = ftr(_s, \"Fav\", \"Canada\").concat(ftr(_s, \"Fav\", \"USA\")).concat(ftr(_s, \"Normal\", \"Canada\")).concat(ftr(_s, \"Normal\", \"USA\"));\n _secondary = ftr(_s, \"Private\", \"Canada\").concat(ftr(_s, \"Private\", \"USA\"));\n } else {\n // American\n _main = ftr(_s, \"Fav\", \"USA\").concat(ftr(_s, \"Fav\", \"Canada\")).concat(ftr(_s, \"Normal\", \"USA\")).concat(ftr(_s, \"Normal\", \"Canada\"));\n _secondary = ftr(_s, \"Private\", \"USA\").concat(ftr(_s, \"Private\", \"Canada\"))\n }\n\n\n // Trevor asks not split private from fav,normal\n let _break = _main.length || null;\n _main = _main.concat(_secondary);\n _secondary = [];\n\n // Counts\n if (_qps.length > 0 && _count) {\n // only count suppliers that exist in both...\n let matches = countMatches(_main, _qps)\n return _main.length - matches;\n }\n\n if (_count) {\n return _secondary.length;\n }\n\n if (_qps.length > 0 && !_count && !toggle) {\n return _quickpicks;\n }\n\n let _ret = [];\n\n // hack \n if (_main.length > 0) {\n if (_break !== null) {\n _main[_break - 1][\"break\"] = true;\n }\n\n }\n\n\n _ret = _main;\n\n\n\n return _quickpicks.concat(_ret);\n }\n\n\n\n\n // Supl, oh, oo, sellpr, pm, SupPr, Disc, Cost, Asof, QP-Grp\n\n\n const groupMenu = (f) => {\n return (\n
\n \n {groups.map(item => {\n\n return (\n selectSupplier(f, false, false, item, true)} style={{ \"padding\": \"0px 5px\", \"lineHeight\": \"16px\", \"height\": \"16px\", \"width\": \"40px\" }} key={item}>\n {item}\n \n )\n })}\n \n
\n )\n }\n\n\n const PublisherToolTip = (props) => {\n const { title = \"\" } = props;\n const [open, setOpen] = useState(true);\n return (\n {\n if (open) {\n setOpen(false);\n }\n }} title={(open) ? title : \"\"} placement=\"bottom\">\n {props.children}\n \n )\n }\n\n const [open, setOpen] = useState(true);\n\n const order_columns = [\n {\n title: FAV suppliers are shown first, followed by YES suppliers. When applicable, PRIVATE suppliers can be found under See More at the bottom of the list. NO suppliers will not be shown here, but can be found under the Pubstock tab. Changing supplier priority is done within the Bookmanager software.}>Pref Supp, key: 'flag', width: \"30px\", dataIndex: 'flag', render: (e, f) => {\n return (\n <>\n {(f.country && getFlag(f.country))}\n setOpen(false)} title={(!open) ? \"\" : {f.title} ({drawDeliveryTime(f.delivery_time, f.delivery_time_max)} days)
Click to create an order for this vendor under the default group O. Each click will add one copy on order.
}>\n selectSupplier(f, false, true, \"\", true)} style={{ \"fontSize\": \"11px\", \"fontWeight\": (f.priority === \"Fav\") ? \"bold\" : \"normal\" }}>{f.acct}\n
\n
\n \n );\n }\n },\n {\n title: Grp, key: 'inc', width: \"inc\", dataIndex: 'inc', render: (e, f) => {\n return (\n <>\n Create a new or additional order for this vendor using a group letter of your choosing}>\n selectSupplier(f, false, false, letter, true)} />\n \n \n )\n }\n },\n {\n title: OH, key: 'onhand', dataIndex: 'onhand', render: (e, f) => {\n\n if (!f.onhand && !f.onorder) {\n return no stock\n } else {\n return (e) ? e.toString() : \"\"\n }\n }\n\n },\n { title: OO, key: 'onorder', dataIndex: 'onorder', render: (e) => { return (e) ? drawOO(e) : \"\" } },\n\n {\n title: SellPr, key: 'sell_price', dataIndex: 'sell_price', render: (e) => {\n return updatePrice(e)}>{e}\n }\n },\n {\n title: PM, key: 'profit_margin', dataIndex: 'profit_margin', render: (e) => {\n return (e) ? <>{e}% : \"\"\n }\n },\n\n {\n title: SupPr , key: 'supplier_price', dataIndex: 'supplier_price', render: (e) => {\n return ( updatePrice(e, true)}>{e})\n }\n },\n\n { title: Disc , key: 'discount', dataIndex: 'discount' },\n\n {\n title: Exch, key: 'exchange', dataIndex: 'exchange', render: (e) => {\n return (e != 1) ? {e} : \"\"\n }\n },\n { title: Cost, key: 'ex', dataIndex: 'cost' },\n { title: As of, key: 'as_of', dataIndex: 'as_of', render: (e) => { return (e) ? moment(e * 1000).fromNow() : \"\" } },\n {\n title: QP-Grp, width: \"66px\", key: 'quick', dataIndex: 'quick', render: (e, f) => {\n return \n }\n }\n ]\n\n const show_more = parseSuppliers(true);\n\n const drawFooter = () => {\n return (\n
\n \n \n \n setToggle(!toggle)}>{(toggle) ? <>See less   : Suppliers marked as PRIVATE will be hidden until See More is selected. When a supplier is marked as a Quick Pick, all other suppliers will appear under See More.}>See {show_more} more  }\n \n \n  \n \n
\n \n
\n )\n }\n\n const drawLast = (_supp) => {\n let _find = parseSuppliers().find(item => item.acct === _supp);\n if (_find) {\n selectSupplier(_find)\n } else {\n selectSupplier({ acct: _supp });\n }\n }\n\n const drawHeader = (_header, _memory = true) => {\n return (\n
\n \n {_header}\n \n
\n )\n }\n\n if (is_order) {\n if (parseSuppliers().length === 0) {\n return (<>);\n }\n return (<>\n }\n title={() => (wrap) ? drawHeader(\"Pubstock\", true) : null}\n size=\"small\"\n rowKey={\"acct\"}\n rowClassName={(record, index) => {\n if (record.hasOwnProperty(\"break\")) {\n return \"fav-break\"\n }\n\n }}\n className={(props.class ? \"pub-table \" + props.class : \"pub-table\")}\n columns={order_columns}\n dataSource={addKeys(parseSuppliers())}\n footer={() => drawFooter()}\n pagination={false}\n expandIconColumnIndex={-1}\n expandedRowKeys={expanded}\n onExpand={(e) => { return false; }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n )\n }\n\n return (<>\n
\n {/* \n }\n\n\n const drawResults = () => {\n return searchFilter().map(item => {\n return (
setClass(item)} className=\"c\">{item.label}
)\n })\n }\n\n const inside = () => {\n return (<>\n
setVisible(false)} style={{ \"width\": \"170px\", \"marginTop\": \"-5px\" }} >\n
\n \n {drawResults()}\n \n
\n )\n }\n\n const getPlaceHolder = () => {\n\n let ret = \"\"\n if (suggested_bm_data.class_2) {\n return suggested_bm_data.class_1 + \" - \" + suggested_bm_data.class_2;\n } else {\n return suggested_bm_data.class_1;\n }\n\n }\n\n const getOptions = (_search = true) => {\n\n let _arr = [];\n if (!key) {\n if (_memory.length > 0) {\n _arr.push({\n label: \"Recent\",\n options: (key) ? [] : _memory.slice(0, 3),\n })\n }\n }\n\n if (searchFilter(_search).length > 0) {\n _arr.push(\n {\n label: \"Categories\",\n options: searchFilter(_search).map(item => {\n let _v = item.class_1;\n if (item.class_2) {\n _v += \" - \" + item.class_2;\n }\n return ({ value: _v, label: <>{item.label}   })\n }),\n }\n )\n }\n return _arr;\n }\n\n return (\n <> \n
\n {\n setKey((category) ? category : suggested_bm_data.class_1)\n }}\n onBlur={() => {\n setKey((subCategory) ? category + \" - \" + subCategory : category)\n }}\n onChange={(e) => {\n if(e){\n saveMemory(\"category_key\", e)\n }\n \n setKey(e)\n }}\n onSelect={(e) => {\n let obj = {}\n let _classes = e.split(\" - \");\n if (_classes.length === 2) {\n obj.label = _classes[0] + \" - \" + _classes[1];\n obj.class_1 = _classes[0];\n obj.class_2 = _classes[1];\n setClass(obj);\n } else {\n obj.label = _classes[0];\n obj.class_1 = _classes[0];\n obj.class_2 = \"\";\n setClass(obj);\n }\n }}\n className=\"redPlaceholder\"\n placeholder={(suggested_bm_data.class_1) ? \"* \" + getPlaceHolder() : \"Select Class.. \"}\n style={{ \"width\": \"100%\", \"fontSize\": \"11px\", fontWeight : \"bold\", \"height\": \"22px\", \"textAlign\": \"left\", \"marginTop\": \"0px\", \"border\": \"none\" }}\n dropdownClassName=\"tinyDropdown\"\n size=\"small\"\n options={getOptions()}\n />\n {drawRepeat()}\n
\n \n )\n\n}","import React, { useState } from \"react\";\nimport { Row, Col, AutoComplete, Space, Button, Spin, Tooltip, Modal, Checkbox, message } from \"antd\";\nimport CategorySelector from \"../CategorySelector\";\nimport { getMemory, saveMemory } from \"../../utils/Utils\";\nimport { apiCall } from \"../../utils/Api\";\nimport Html from \"../../utils/Html\";\nimport conditional from \"../../tools/conditional\";\nimport Cookies from \"js-cookie\";\nimport { ReloadOutlined } from '@ant-design/icons';\nexport default function BMNoteCats(props) {\n\n const { total_onhand = 0, isbn = \"\", condition = \"\", series = \"\", condition_code = \"\", data = {}, callback=() =>{}, suggested_bm_data = { class_1: \"\", class_2: \"\" } } = props;\n const { notes = \"\", store = \"\" } = props.data;\n\n const [note, setNote] = useState(notes);\n const [category, setCategory] = useState((props.data.category) ? props.data.category : \"\");\n const [subCategory, setSubCategory] = useState((props.data.subcategory) ? props.data.subcategory : \"\");\n\n\n const saveCategoriesNotes = (_notes = note, _category = category, _subcategory = subCategory, skip_note = false) => {\n\n if (skip_note) {\n _notes = note;\n }\n\n let obj = {};\n obj.isbn = isbn;\n\n if (_category) {\n\n if (obj.notes !== null) {\n obj.notes = _notes;\n }\n\n obj.class_1 = _category;\n\n if (obj.class_2 !== null) {\n obj.class_2 = _subcategory;\n }\n\n }\n\n if (!_category) {\n obj.notes = \"\";\n obj.class_1 = \"\"\n obj.class_2 = \"\"\n }\n\n obj.condition_code = condition_code;\n\n let _san = \"\";\n if (store) {\n let _find = window.sitesettings.stores.find(item => item.store_number.toString() === store.toString());\n if (_find) {\n _san = _find.san;\n }\n } else {\n let _find = window.sitesettings.stores.find(item => item.is_primary);\n if (_find) {\n _san = _find.san;\n }\n }\n\n if (_san) {\n obj.multistore_san = _san;\n }\n\n if (obj.notes === undefined || obj.notes === null) {\n obj.notes = \"\";\n }\n\n\n\n apiCall(\"title/saveCategoriesNotes\", obj, (_status, _result) => {\n if (_status) {\n callback(condition_code, _category, _subcategory, _notes);\n return; \n } else {\n\n setNote(props.data.notes);\n setCategory((props.data.category) ? props.data.category : \"\")\n setSubCategory((props.data.subcategory) ? props.data.subcategory : \"\")\n\n let suppress = (_result.error === \"Store needs real-time updates to be turned on. Please send a backup to confirm setting has changed.\")\n\n // trap for specific error above (don't suppress others)\n if (Cookies.get(\"suppressNoteCatError\") && suppress) {\n return;\n }\n\n Modal.warn({\n title: \"Warning!\", content:\n <>\n {(suppress && <>\n Your Bookmanager software has real-time inventory updates turned off. Certain helpful functions on this site (like updating/adding inventory Notes and Class and having those instantly reflect in the software) require real-time inventory updates to be enabled. If your store network prevents you from enabling that feature, please contact Bookmanager support to troubleshoot the issue.\n )}\n\n {(!suppress && <>\n {_result.error}\n )}\n\n\n
\n\n {/* only allow suppression of specific error */}\n {(suppress && <>\n {\n if (e.target.checked) {\n Cookies.set(\"suppressNoteCatError\", \"true\");\n } else {\n Cookies.set(\"suppressNoteCatError\", \"\");\n }\n }}>Don't show me this warning again.\n\n )}\n\n \n })\n\n }\n setShowInput(false);\n })\n\n }\n\n\n const drawNotes = (_notes = \"\") => {\n\n\n if (!_notes) {\n return \"\";\n }\n\n let flags = [\"^^\", \"//%\", \"//$\", \"//@\", \"//?\", \"//O\"];\n\n let _split = _notes.split(\" \");\n\n\n for (let i = 0; i < _split.length; i++) {\n flags.forEach(flag => {\n if (_split[i].substring(0, flag.length) == flag) {\n _split[i] = \"\" + _split[i] + \"\"\n }\n })\n }\n\n _notes = _split.join(\" \");\n _notes = \"\" + _notes + \"\";\n\n return
;\n\n }\n\n\n const [showInput, setShowInput] = useState(false);\n\n\n const getOptions = () => {\n\n let _arr = [];\n if (series) {\n _arr.push({ label: \"Series\", options: [{ value: series, label: <>{series} }] })\n }\n\n if (getMemory(\"inventory_note\").length > 0) {\n _arr.push({\n label: \"Recent\",\n options: getMemory(\"inventory_note\").map(val => {\n return { value: val }\n })\n\n })\n }\n\n return _arr;\n }\n\n const setRepeat = () => {\n\n let _mem = getMemory(\"inventory_note\");\n let _last = \"\";\n if (_mem.length > 1) {\n _last = _mem[0];\n } else {\n message.error(\"No previous note found.\")\n return;\n }\n\n\n setNote(_mem[0]);\n }\n\n const drawRepeat = () => {\n\n return \n }\n\n\n if ((total_onhand > 0)) {\n\n\n return (\n 0) ? \"This title's class cannot be changed online because there is stock on hand. Please make changes in the Bookmanager software.\" : \"\"}>\n } spinning={(total_onhand > 0)}>\n \n \n
\n
{drawNotes(note)}  
\n {/*
{drawNotes(note)}
*/}\n
\n \n \n
{category}{(subCategory) ? <>-{subCategory} : \"\"}  
\n \n
\n
\n
\n )\n\n\n }\n\n\n\n\n return (\n <>\n\n
0)) ? \"0.5\" : \"1\", pointerEvents: ((total_onhand > 0)) ? \"none\" : \"inherit\" }}>
\n \n \n
setShowInput(true)}>\n\n \n
\n
{drawNotes(note)}
\n {drawRepeat()}\n
\n
\n\n \n
\n e.target.select()}\n onChange={(e) => {\n setNote(e);\n if (e) {\n //saveMemory(\"inventory_note\", e);\n }\n }}\n\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n if (e.target.value) {\n saveMemory(\"inventory_note\", e.target.value);\n }\n\n saveCategoriesNotes(e.target.value);\n }\n }}\n\n onBlur={(e) => {\n if (e.target.value) {\n saveMemory(\"inventory_note\", e.target.value);\n }\n saveCategoriesNotes(e.target.value)\n }}\n placeholder={(category) ? \"Inventory note...\" : \"Select class before adding a note...\"}\n style={{ \"width\": \"100%\", fontWeight: \"bold\", \"fontSize\": \"11px\", \"height\": \"22px\", \"textAlign\": \"left\", \"marginTop\": \"0px\", \"border\": \"none\" }}\n dropdownClassName=\"tinyDropdown\"\n // className=\"noteSelector\"\n allowClear={true}\n size=\"small\"\n options={getOptions()}\n />\n {drawRepeat()}\n
\n
\n
\n \n\n \n \n \n\n
\n\n \n )\n}","import { Col, Row, Select, Tooltip } from \"antd\";\nimport React, { useState } from \"react\";\nimport conditional from \"../utils/conditional\";\nimport { bmDate } from \"../utils/Utils\";\nimport BMStation from \"./title/BMStation\";\nimport { CaretDownOutlined, ShoppingCartOutlined } from '@ant-design/icons';\nimport BMNoteCats from \"./title/BMNoteCats\";\nimport moment from \"moment\";\nimport SalesActivity from \"./SalesActivity\";\nimport PeerSales from \"./PeerSales\";\nimport { usePrefs } from \"../utils/Prefs\";\n\nexport default function Condition(props) {\n\n const [showActivity, setShowActivity] = useState(\"\");\n const [prefs, setPrefs] = usePrefs();\n const { isbn, suggested_bm_data = { class_1: \"\", class_2: \"\" } } = props;\n\n const [openState, setOpenState] = useState(\"\")\n\n\n const toggleActivity = (_view, _lbl = \"\") => {\n\n let reopen = (_lbl !== openState);\n setOpenState(_lbl)\n setShowActivity(((_view) && _view == showActivity) ? \"\" : _view)\n if (reopen) {\n setTimeout(() => {\n setShowActivity(_view)\n }, 1)\n }\n }\n\n const [data, setData] = useState(props.data);\n\n const suggestedCategory = suggested_bm_data.class_1 || \"\";\n const suggestedSubcategory = suggested_bm_data.class_2 || \"\";\n\n // destructure\n const {\n // condition\n code = \"\",\n code_text = \"\",\n code_used_desc = \"\",\n code_used_note = \"\",\n\n // extras\n total_onhand = 0,\n minimum_onhand = 0,\n backroom = 0,\n held = 0,\n available_onhand = 0,\n pending_return = 0,\n special_order = 0,\n available_onorder = 0,\n pending_onorder = 0,\n\n // from bookmanager backups\n primary_key = \"\",\n discount = \"\",\n title = \"\",\n pubdate = \"\",\n author = \"\",\n binding = \"\",\n price = \"\",\n sell_price = \"\",\n carton_quantity = 0,\n profit_cost_string = \"\",\n supplier_1 = \"\",\n supplier_2 = \"\",\n supplier_3 = \"\",\n section = \"\",\n out_of_stock_status = \"\",\n returnable = \"\",\n entered = \"\",\n original_publisher = \"\",\n row_status = \"\",\n\n // Sales\n sold = false,\n cart_qty = 0,\n received = false,\n adjusted = false,\n returns = false,\n peer = false\n\n } = data;\n\n\n const osstat_convert = {\n 'A': 'AVAI',\n 'B1': 'BOS',\n 'B2': 'BNYP',\n 'B3': 'BRP',\n 'B4': 'BITO',\n 'C1': 'COS',\n 'C2': 'CNYP',\n 'C3': 'CNOP',\n 'C4': 'CNR',\n 'C5': 'COP',\n 'C6': 'CNL',\n 'C7': 'CNW',\n 'C8': 'COSI',\n 'C9': 'CPXL',\n 'CA': 'CRP',\n 'CB': 'CITO',\n 'CC': 'CBU',\n 'CD': 'CBC'\n }\n\n const converted_out_of_stock_status = osstat_convert[out_of_stock_status] || out_of_stock_status;\n\n\n // This is gross, but it's to assign spots to put extra info - Any overflow will be added to the top right;\n\n const getExtras = () => {\n\n let _ex = [];\n let _spots = [];\n\n if (special_order) {\n _ex.push({\n label: \"S/O\",\n class: \"extra-lbl-special_order\",\n valueClass: \"extra-special_order\",\n value: special_order\n })\n }\n\n if (held) {\n _ex.push({\n label: \"Held\",\n class: \"extra-lbl-held\",\n valueClass: \"extra-held\",\n value: held\n })\n }\n\n // only show if a specific store is selected or is non multi-store\n if ((minimum_onhand && window.sitesettings.stores.length === 1) || (minimum_onhand && prefs.store)) {\n\n _ex.push({\n label: \"mOH\",\n class: \"extra-lbl-minimum_onhand\",\n valueClass: \"extra-minimum_onhand\",\n value: minimum_onhand\n })\n }\n // only show if a specific store is selected or is non multi-store\n if ((backroom && window.sitesettings.stores.length === 1) || (backroom && prefs.store)) {\n _ex.push({\n label: \"Bkrm\",\n class: \"extra-lbl-backroom\",\n valueClass: \"extra-backroom\",\n value: backroom\n })\n }\n\n if (pending_return) {\n _ex.push({\n label: \"Pdrn\",\n class: \"extra-lbl-pending_return\",\n valueClass: \"extra-pending_return\",\n value: pending_return\n })\n }\n\n\n // Add extra to returns row\n if (_ex.length > 0 && returns) {\n let _x = _ex[0];\n _x.spot = \"Retn\";\n _spots.push(_x);\n _ex.shift();\n }\n\n // Add extra to returns row\n if (_ex.length > 0 && adjusted) {\n let _x = _ex[0];\n _x.spot = \"Adj\";\n _spots.push(_x);\n _ex.shift();\n }\n\n\n // Add extra to date row\n if (window.sitesettings.stores.length === 1 && _ex.length > 0) {\n let _x = _ex[0];\n _x.spot = \"Date\";\n _spots.push(_x);\n _ex.shift();\n }\n\n\n\n return {\n spots: _spots,\n extra: _ex\n }\n\n\n }\n\n\n\n const extras = getExtras();\n\n\n const parseSold = (_msinfo = false) => {\n\n if (!_msinfo) {\n return [];\n }\n\n let _sold = [];\n _msinfo.forEach(element => {\n\n // // draw a sold row regardless...\n // if(element.hasOwnProperty(\"cart_qty\") && element.cart_qty > 0){\n // element.sold = {total : 0}\n // }\n\n\n\n if (element.hasOwnProperty(\"sold\")) {\n element.sold.storenum = element.storenum;\n element.sold.available_onhand = element.hasOwnProperty(\"available_onhand\") ? element.available_onhand : 0;\n element.sold.total_onhand = element.hasOwnProperty(\"total_onhand\") ? element.total_onhand : 0;\n element.sold.available_onorder = element.hasOwnProperty(\"available_onorder\") ? element.available_onorder : 0;\n element.sold.pending_onorder = element.hasOwnProperty(\"pending_onorder\") ? element.pending_onorder : 0;\n element.sold.cart_qty = element.hasOwnProperty(\"cart_qty\") ? element.cart_qty : 0;\n _sold.push(element.sold);\n } else {\n let x = {}\n x.storenum = element.storenum;\n x.available_onhand = element.hasOwnProperty(\"available_onhand\") ? element.available_onhand : 0;\n x.total_onhand = element.hasOwnProperty(\"total_onhand\") ? element.total_onhand : 0;\n x.available_onorder = element.hasOwnProperty(\"available_onorder\") ? element.available_onorder : 0;\n x.pending_onorder = element.hasOwnProperty(\"pending_onorder\") ? element.pending_onorder : 0;\n x.cart_qty = element.hasOwnProperty(\"cart_qty\") ? element.cart_qty : 0;\n if ((x.available_onhand) || (x.total_onhand) || (x.available_onorder) || (x.pending_onorder)) {\n _sold.push(x);\n }\n }\n });\n\n return _sold;\n }\n\n\n const drawExtra = (_obj, _row = false) => {\n\n\n\n\n\n if (!_obj) {\n return ( )\n }\n\n if (_row) {\n return (\n toggleActivity(\"sales\", _obj.label)} className=\"bc\" style={{ \"fontSize\": \"11px\", \"color\": \"#aaa\", \"textAlign\": \"right\", \"borderBottom\": \"1px solid\", \"lineHeight\": \"22px\" }}>\n  \n \n
{_obj.label}
\n \n \n
{_obj.value}
\n \n
\n )\n } else {\n return (\n <>\n toggleActivity(\"sales\", _obj.label)} flex={\"37px\"} className={\"bc \" + _obj.class} style={{ \"fontSize\": \"11px\", \"cursor\": \"pointer\", \"borderLeft\": \"1px solid\", \"fontWeight\": \"normal\", \"textAlign\": \"right\", \"paddingRight\": \"3px\" }}>\n
{_obj.label}
\n \n toggleActivity(\"sales\", _obj.label)} flex={\"38px\"} className={\"bc \" + _obj.valueClass} style={{ \"fontSize\": \"11px\", \"cursor\": \"pointer\", \"borderLeft\": \"1px solid\", \"fontWeight\": \"normal\", \"textAlign\": \"right\", \"paddingRight\": \"3px\" }}>\n
{_obj.value}
\n \n \n )\n }\n }\n\n const switchStore = (_store) => {\n\n\n\n setPrefs({ ...prefs, \"store\": _store });\n\n if (_store === \"\") {\n setData(props.data);\n }\n\n let obj = props.data.msinfo.find(item => item.storenum === _store);\n\n if (!obj) {\n return;\n }\n\n obj.code = props.data.code;\n obj.code_text = props.data.code_text;\n\n setData(obj)\n\n }\n\n const drawStoreSelector = () => {\n\n return (\n \n )\n\n }\n\n const drawHeadersRow = () => {\n\n let _months = [\"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\"]\n _months = _months.map((item, index) => {\n return moment().startOf(\"month\").add(-(_months.length - (index + 1)), \"month\").format(\"MMM\");\n });\n\n return (\n \n  \n Ttl\n {_months.map((item, _index) => {\n return ( toggleActivity(\"sales\")} key={_index} style={{ \"paddingRight\": \"2px\", \"cursor\": \"pointer\" }} flex={\"30px\"}>{item})\n })}\n Wk\n \n {drawExtra(extras.spots.find(item => item.spot === \"Date\"))}\n \n 1)}>\n \n {drawStoreSelector()}\n \n \n \n )\n }\n\n\n\n const drawToggle = (_aoo = available_onorder, _poo = pending_onorder) => {\n\n if (!_aoo && !_poo && !prefs.pendingOO) {\n _aoo = \"\";\n }\n\n if (prefs.pendingOO) {\n return (\n { e.preventDefault(); e.stopPropagation(); setPrefs({ ...prefs, \"pendingOO\": !prefs.pendingOO }); }} flex={\"38px\"} className=\"bc\" style={{ \"cursor\": \"pointer\", \"borderLeft\": \"1px solid\", \"backgroundColor\": \"#ffe8bf\", \"color\": \"#000\", \"fontWeight\": \"normal\", \"textAlign\": \"right\", \"paddingRight\": \"3px\" }}>\n
{(converted_out_of_stock_status === \"BOS\" && \"Yes \")} {_aoo + _poo}
\n \n )\n } else {\n return (\n { e.preventDefault(); e.stopPropagation(); setPrefs({ ...prefs, \"pendingOO\": !prefs.pendingOO }); }} flex={\"38px\"} className=\"bc\" style={{ \"cursor\": \"pointer\", \"borderLeft\": \"1px solid\", \"backgroundColor\": \"#ffe8bf\", \"color\": \"#000\", \"fontWeight\": \"normal\", \"textAlign\": \"right\", \"paddingRight\": \"3px\" }}>\n
{(converted_out_of_stock_status === \"BOS\" && \"Yes \")}{_aoo}{(_poo) ?  {_poo} : \"\"}
\n \n )\n }\n\n }\n\n\n const drawOnhand = (_oh, _toh) => {\n if (!_oh && !_toh) {\n _oh = \"\"\n }\n\n let _oh_label = _oh || \"0\";\n return (\n \n
{(converted_out_of_stock_status === \"AVAI\" && \"Yes \")}{_oh}{(_toh && _toh !== _oh) ? {_toh} : \"\"}
\n \n )\n }\n\n\n const drawValues = (_data = {}, _type = \"\", _cart_qty = null) => {\n if (!_data && _type !== \"Rcvd\" && _type !== \"Ttl\") {\n return <>\n }\n\n if (!_data) {\n _data = {};\n }\n\n let { total_stores = 0, total_stores_region } = _data;\n let { months = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], total = 0, week = 0, onhandlocs = 0, onorderlocs = 0, onhand = 0, onorder = 0, title = \"\" } = _data;\n let _color = \"#000\";\n let _class = \"rowSold\";\n\n let _ispeer = (_type === \"Peer\");\n\n let border = false;\n if (_type === \"Ttl\") {\n if (peer) {\n border = true;\n }\n }\n\n if (peer && _type === \"Peer\") {\n border = false;\n }\n\n if (_ispeer) {\n total = 0;\n }\n\n switch (_type) {\n\n case \"Adj\":\n border = true;\n _color = \"#228B22\";\n _class = \"rowAdj\";\n break;\n\n case \"Retn\":\n border = true;\n _color = \"#228B22\";\n _class = \"rowRetn\";\n break;\n\n case \"Rcvd\":\n border = true;\n _color = \"#228B22\";\n _class = \"rowRcvd\";\n break;\n\n case \"Peer\":\n _color = \"#228B22\";\n _class = \"rowPeer\";\n break;\n\n }\n\n // Change the Ttl label to Sold for non-multistores\n let _label = _type;\n if (window.sitesettings.stores.length === 1 && _label === \"Ttl\") {\n _label = \"Sold\"\n }\n\n return (\n (_ispeer) ? toggleActivity(\"peer\") : toggleActivity(\"sales\", _type)} className={_class + \" bc rowHover\"} style={{ \"fontSize\": (_ispeer || _type.includes(\"#\")) ? \"10px\" : \"11px\", \"lineHeight\": (_ispeer || _type.includes(\"#\")) ? \"22px\" : \"22px\", \"fontWeight\": (_ispeer || _type.includes(\"#\")) ? \"normal\" : \"normal\", \"textAlign\": \"right\", \"borderBottom\": (border) ? \"0px solid\" : \"none\" }}>\n\n \n \n {total_stores}{total_stores_region} Peers \n \n \n\n \n {_label} \n {(total) ? total : \"\"}\n \n\n {months.map((item, _index) => {\n return ({(item) ? item : \"\"});\n })}\n\n {(week) ? week : \"\"}\n\n \n aOH\n {(prefs.pendingOO) ? \"tOO\" : \"aOO\"}\n
\n Biz cart quantities}>\n
\n
\n\n \n {drawOnhand(_data.available_onhand, _data.total_onhand)}\n {drawToggle(_data.available_onorder, _data.pending_onorder)}\n \n\n \n {drawOnhand(available_onhand, total_onhand)}\n {drawToggle()}\n \n\n \n
{(onhand) ? onhand : \"\"}{(onhandlocs) ? onhandlocs : \"\"}
\n
{(onorder) ? onorder : \"\"}{(onorderlocs) ? onorderlocs : \"\"}
\n
\n\n \n {drawExtra(extras.spots.find(item => item.spot === _type))}\n \n\n \n
\n {(_cart_qty) ? _cart_qty : <> }\n
\n
\n
\n )\n }\n\n\n const drawPrice = (_prev = false) => {\n\n if (!price) {\n return \"\";\n }\n\n if (sell_price && _prev) {\n\n if (discount) {\n return <>
({discount}% off ${price})
\n }\n return <>
(reg. ${price})
\n }\n\n if (_prev) {\n return \"\";\n }\n\n return
{(sell_price) ? \"$\" + sell_price.toString() : \"$\" + price.toString()}
\n }\n\n\n\n const drawBM = () => {\n\n if (!prefs.bm_notes) {\n return (<>);\n }\n\n return (\n <>\n \n ISBN\n {primary_key}\n \n PC\n {profit_cost_string}\n \n\n \n Title\n {title}\n Bd\n {binding}\n Entered\n {(entered) ? bmDate(entered) : \"\"}\n \n\n \n Auth\n {author}\n Pubdate\n {(pubdate) ? bmDate(pubdate) : \"\"}\n O/S Stat\n {converted_out_of_stock_status}\n \n\n \n Supl\n {supplier_1} {supplier_2} {supplier_3}\n Publ\n {original_publisher}\n Rtnbl\n {returnable}\n Crtn Qty\n {carton_quantity}\n \n \n )\n }\n\n return (\n <>\n
\n {(code_text === \"New\" ? <> : code_text)}{(code_used_desc) ? <> - {code_used_desc} : \"\"} {(code_used_note) ? <>   {code_used_note} : \"\"}\n
\n
\n
\n \n <>\n \n \n \n
\n \n
\n \n
\n
\n
\n \n \n
\n
\n {section}\n
\n
\n \n \n
\n
\n
{drawPrice()}
\n
{drawPrice(true)}
\n
\n
\n \n
\n\n\n {extras.extra.map(item => {\n return drawExtra(item, true);\n })}\n {drawHeadersRow()}\n {drawValues(adjusted, \"Adj\")}\n {drawValues(returns, \"Retn\")}\n {drawValues(received, \"Rcvd\")}\n\n\n \n {(parseSold(props.data.msinfo).length > 0 && <>\n
\n {parseSold(props.data.msinfo).map((item, index) => {\n\n return drawValues(item, \"#\" + item.storenum, item.cart_qty || 0);\n })}\n
\n )}\n
\n\n\n \n {(parseSold(props.data.msinfo).length > 0 && <>\n
\n {parseSold(props.data.msinfo).filter(i => i.storenum === prefs.store).map((item, index) => {\n\n return drawValues(item, \"#\" + item.storenum, item.cart_qty || 0);\n })}\n
\n )}\n
\n\n\n \n
\n {drawValues(sold, \"Ttl\", cart_qty)}\n
\n
\n\n {drawValues(peer, \"Peer\")}\n\n \n
>> {row_status} <<
\n
\n {drawBM()}\n\n
\n
\n\n \n
\n \n
\n
\n\n \n
\n
\n
\n
\n\n\n \n )\n\n\n}","import React, { useState } from \"react\";\nimport Condition from \"./Condition\";\nimport { Menu, Dropdown } from \"antd\";\n\nexport default function Conditions(props) {\n\n const { isbn = \"\", data = { suggested_bm_data : {}} } = props\n const [conditions, setConditions] = useState((props.conditions) ? props.conditions : []);\n\n const addCondition = (_code) => {\n let _orig = [...conditions];\n _orig.push({\n code: _code.code,\n code_text: _code.name,\n })\n setConditions(_orig)\n }\n\n\n const drawSelector = () => {\n\n let _current_codes = conditions.map(item => item.code_text);\n\n return (\n \n {window.sitesettings.condition_codes.filter(item => !_current_codes.includes(item.name)).map(code => {\n return addCondition(code)} key={code.name}>{code.name}\n })}\n }>\n \n \n )\n }\n\n\n return (\n <>\n
{drawSelector()}
\n {conditions.map((item, _index) => {\n return (\n
\n \n
\n
\n )\n })}\n \n )\n\n\n\n\n}","\nimport { Input, Space, Form, Modal, Divider } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { PushpinOutlined, PushpinFilled, QuestionCircleOutlined } from '@ant-design/icons';\nimport Cookies from \"js-cookie\";\nexport default function Splitter(props) {\n\n const { record, updateOrder = () => { }, saveSplitter = () => {}, quantityInput = false } = props;\n const [form] = Form.useForm();\n\n\n const [stores, setStores] = useState(\n\n window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).map((item, index) => {\n \n\n if (!record.hasOwnProperty(\"stores\") || (record.stores.length === 0)) {\n return {\n store_index: index,\n store_number : item.store_number,\n qty: (item.is_primary) ? (record.quantity) ? record.quantity : 0 : 0,\n }\n } else {\n \n \n return {\n store_index: index,\n store_number : item.store_number,\n qty: (record.stores[index][item.san]) ? record.stores[index][item.san] : 0,\n }\n }\n })\n );\n\n const mystore = window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).findIndex(item => item.is_primary)\n const [first, setFirst] = useState(true);\n\n\n const updateStores = (_uid, _key, _value) =>{\n\n let ret = []\n\n \n window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).forEach((itn, ind) => {\n ret.push(\n {\n [itn.san]: (_value[ind]) ? _value[ind] : 0\n }\n )\n });\n\n\n \n\n\n updateOrder(_uid, _key, _value);\n\n \n }\n\n useEffect(() => {\n\n\n form.setFieldsValue({ splitter: \"\" });\n record.stores.forEach((item, index) => {\n\n let value; \n if(isNaN(item)){\n value = Object.values(item)[0];\n } else {\n value = item; \n }\n\n form.setFieldsValue({ [\"store\" + index]: (value) ? value : \"\" });\n })\n\n \n\n }, [record, props.rerender])\n\n\n useEffect(() => {\n\n\n if (first) {\n setFirst(false);\n return;\n }\n \n let total = stores.reduce(function (sum, current) { return sum + current.qty; }, 0)\n if (total != parseInt(record.quantity)) {\n let diff = parseInt(record.quantity) - total;\n if (diff > 0) {\n // add to main store\n let _store = stores.find(item => item.store_index === mystore);\n if(_store){\n augment(_store.qty + diff, mystore, false);\n }\n \n } else {\n // split between stores\n decrement(-diff);\n }\n }\n\n }, [quantityInput])\n\n const distribute = (_qty) => {\n if(isNaN(_qty)){ _qty = 0; }\n let _total = 0;\n let update = stores.map(store => {\n _total += _qty;\n return { ...store, \"qty\": _qty }\n })\n setStores(update);\n updateValues(update);\n updateOrder(record.key, \"quantity\", _total);\n updateStores(record.key, \"stores\", update.map(item => { return item.qty }));\n saveSplitter(record.key, update.map(item => { return item.qty }), _total)\n }\n\n const divvy = (_qty) => {\n if(isNaN(_qty)){ _qty = 0; }\n let remainder = _qty % stores.length;\n let update = stores.map(store => {\n let equal_amt = (_qty - remainder) / stores.length;\n let add_amt = (store.store_index === mystore) ? remainder + equal_amt : equal_amt;\n return { ...store, \"qty\": add_amt }\n });\n setStores(update);\n updateValues(update);\n updateOrder(record.key, \"quantity\", _qty);\n updateStores(record.key, \"stores\", update.map(item => { return item.qty }));\n saveSplitter(record.key, update.map(item => { return item.qty }), _qty)\n \n }\n\n const decrement = (_qty) => {\n if(isNaN(_qty)){ _qty = 0; }\n let _stores = [...stores];\n for (let i = 0; i < _qty; i++) {\n \n let most = _stores.reduce((max, store) => max.qty > store.qty ? max : store);\n if (_stores[most.store_index].qty > 0) {\n _stores[most.store_index].qty = _stores[most.store_index].qty - 1;\n }\n }\n updateValues(_stores);\n let _final = 0;\n updateStores(record.key, \"stores\", _stores.map(item => { _final += item.qty; return item.qty }));\n saveSplitter(record.key, _stores.map(item => { return item.qty }), _final)\n setStores(_stores)\n }\n\n\n const increase = (_qty) => {\n let _extra = stores.filter(item => item.store_index !== mystore);\n let _count = _extra.reduce(function(sum, current) {\n return sum + current.qty;\n }, 0);\n\n let diff = _qty - _count; \n augment(diff);\n }\n\n const reduce = (_qty) => {\n\n if(_qty<0){\n return;\n }\n let _count = stores.reduce(function(sum, current) {\n return sum + current.qty;\n }, 0);\n\n let _diff = _count - _qty;\n let _stores = [...stores];\n\n let i = 0;\n \n while(_diff > 0){\n let _index = i % _stores.length;\n if(_stores[_index].qty){\n _stores[_index].qty--;\n _diff--; \n } \n // just in case\n if(i>10000) break; \n i++; \n }\n \n updateValues(_stores);\n saveSplitter(record.key, _stores.map(item => { return item.qty }), _qty);\n updateStores(record.key, \"stores\", _stores.map(item => { return item.qty }));\n setStores(_stores)\n // for(let i = 0; i < _diff; i++){\n // let _index = i % _stores.length;\n // if(_stores[_index].qty){\n // _stores[_index].qty--; \n // } \n // }\n\n }\n\n const augment = (_qty, _store_index = mystore, _update = true) => {\n \n\n if(isNaN(_qty)){ _qty = 0; }\n\n let _rest_qty = 0;\n let _selected_qty = 0;\n let is_primary = false;\n let diff = 0;\n let _final = 0;\n\n for (let i = 0; i < stores.length; i++) {\n if (stores[i].store_index === _store_index) {\n is_primary = (_store_index === mystore);\n diff = _qty - stores[i].qty;\n _selected_qty += stores[i].qty\n } else {\n _rest_qty += stores[i].qty;\n }\n }\n\n let update = stores.map(store => {\n if (!is_primary && store.store_index === mystore) {\n if (store.qty >= diff) {\n _final = parseInt(store.qty) - parseInt(diff);\n return { ...store, \"qty\": parseInt(store.qty) - parseInt(diff) };\n } else {\n\n let _store = stores.find(item => item.store_number === mystore);\n if(_store){\n _final = parseInt(_rest_qty) + parseInt(_qty) - parseInt(_store.qty);\n }\n \n //updateOrder(record.key, \"quantity\", parseInt(_rest_qty) + parseInt(_qty) - parseInt(stores[mystore].qty));\n return { ...store, \"qty\": 0 };\n }\n }\n if ((store.store_index === _store_index)) {\n if (is_primary) {\n _final = parseInt(_qty) + parseInt(_rest_qty);\n //updateOrder(record.key, \"quantity\", parseInt(_qty) + parseInt(_rest_qty));\n }\n return { ...store, \"qty\": _qty };\n } else {\n return store;\n }\n });\n\n\n let qty = update.reduce(function (acc, obj) { return acc + parseInt(obj.qty); }, 0);\n\n updateOrder(record.key, \"quantity\", qty);\n\n setStores(update)\n updateStores(record.key, \"stores\", update.map(item => { return item.qty }));\n\n if(_update){\n saveSplitter(record.key, update.map(item => { return item.qty }), qty);\n }\n \n updateValues(update);\n }\n\n const updateValues = (_stores) => {\n form.setFieldsValue({ splitter: \"\" });\n _stores.forEach((item, index) => {\n form.setFieldsValue({ [\"store\" + index]: (item.qty) ? item.qty : \"\" });\n })\n }\n\n\n const [pin, setPin] = useState((Cookies.get(\"pin_splitter\") === \"yes\"))\n\n const togglePin = () =>{\n if(Cookies.get(\"pin_splitter\") === \"yes\"){\n Cookies.set(\"pin_splitter\", \"no\");\n setPin(false)\n } else {\n setPin(true)\n Cookies.set(\"pin_splitter\", \"yes\");\n }\n }\n\n\n const splitter = (_str) => {\n\n\n \n\n if (_str === \"\") {\n return;\n }\n\n if (_str === \".\") {\n // split order total\n divvy(record.quantity);\n return;\n } else {\n if (!isNaN(_str) && !_str.includes(\".\")) {\n\n \n if(_str > record.quantity){\n // stupid\n increase(_str);\n } else {\n // dumb\n reduce(_str);\n }\n\n \n \n //distribute(parseInt(_str));\n return;\n }\n }\n\n if (_str.substr(0, 1) === \".\") {\n let num = _str.substr(1, _str.length);\n if (!isNaN(num)) {\n distribute(parseInt(num));\n //divvy(parseInt(num));\n return;\n }\n }\n\n if (_str.includes(\".\")) {\n let split = _str.split(\".\");\n if (split.length === 2 && !isNaN(split[0]) && !isNaN(split[1])) {\n \n let _storenum = -1;\n for(let i = 0; i item.cart_active || item.is_primary).length; i++){\n if(parseInt(window.sitesettings.stores.filter(item => item.cart_active || item.is_primary)[i].store_number) === parseInt(split[0])){\n _storenum = i; \n }\n }\n \n if(_storenum>-1){\n augment(parseInt(split[1]), _storenum);\n }\n \n }\n }\n }\n\n const drawSplitterHelp = () => {\n Modal.info({\n icon : null, \n title : \"Splitter instructions\",\n okText : \"Close\",\n content : <>\n \n . enter
Splits current quantity evenly amongst stores.

\n store number . quantity enter
Assign a quantity to a specific store.

\n . quantity enter
Assign quantity to all stores.

\n For more info, visit the window.open(\"https://support.bookmanager.com/tutorials/webstore/biz-admin-site/using-the-multi-store-splitter-ordering-tool\", \"_blank\")}>Help Center\n \n })\n }\n \n return (\n <>\n
\n
\n \n
\n \n
\n \n e.target.select()} style={{ \"fontSize\": \"10px\", \"height\": \"20px\" }} size=\"small\" onPressEnter={(e) => splitter(e.target.value, 1)} />\n \n
\n
\n {\n stores.map((item, index) => {\n return (\n
\n
#{(item.store_number).toString()}
\n
\n \n e.target.select()} style={{ \"fontSize\": \"10px\", \"height\": \"20px\" }} size=\"small\" onBlur={(e) => augment(parseInt(e.target.value), item.store_index)} />\n \n
\n
\n )\n })\n }\n
\n
\n
\n
\n \n );\n\n}\n","import { Select } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport { getMemory, saveMemory } from \"../utils/Utils\";\n\nexport default function OrderSearchUser(props) {\n\n const [options, setOptions] = useState([]);\n const { defaultValue = \"\", placeholder = \"\", saveOrder = () => {}, updateOrder = () => { }, recordKey = \"\", width = \"100%\", disabled = false } = props;\n const [loading, setLoading] = useState(false)\n\n\n const remembered = getMemory(\"customer_name\").map(item => {\n return {\n value: item,\n label: {item}\n }\n })\n\n const searchUsers = (_term = \" \") => {\n\n if (!_term) {\n return;\n }\n\n setLoading(true);\n\n apiCall(\"cart/searchUser\", { term: _term }, (_status, _result) => {\n setLoading(false);\n if (_status) {\n setOptions(_result.customers.slice(0, 20).map((item, index) => {\n return {\n value: \"(\" + item.shipto + \") \" + item.name,\n label: {item.name}\n }\n }));\n } else {\n setOptions([]);\n }\n \n })\n }\n\n //useEffect(searchUsers, []);\n\n\n\n\n const delaySearch = (term) => {\n\n \n\n if(!term){\n setOptions([]);\n return; \n }\n\n setLoading(true);\n \n if (window.saveTimout) {\n window.clearTimeout(window.saveTimout);\n \n }\n \n \n window.saveTimout = window.setTimeout(() => searchUsers(term), 400);\n\n }\n\n \n return (\n <>\n {(loading) ? \"Searching...\" : \"No users found...\"}
}\n style={{ width: width, \"fontSize\": \"12px\", \"textAlign\": \"left\" }}\n placeholder={placeholder}\n size=\"small\"\n defaultValue={(defaultValue) ? defaultValue : undefined}\n onSearch={(e) => delaySearch(e)}\n onBlur={() => setLoading(false)}\n onChange={(e) => {\n if(e){\n // only remember if it's set to a value\n saveMemory(\"customer_name\", e);\n }\n updateOrder(recordKey, \"customer_name\", e, true);\n }}\n // Disable default string search\n filterOption={(input, option) => { return true; }}\n loading={loading}\n options={(options.length>0) ? options : remembered}\n />\n\n \n )\n}\n","import { Badge, Button, Card } from \"antd\"\nimport React, { useState, useRef, useEffect } from \"react\"\nimport { useHistory } from \"react-router-dom\";\n\nimport conditional from \"../utils/conditional\";\n\nexport default function DropMenu(props) {\n\n const history = useHistory();\n const { block=false, onOpen = () => {}, alignLeft=false, vistoggle = \"\", setVistoggle = () => { }, selected = false, hover = false, title = \"\", label = \"\", count = 1, active = false, custom = false, custom_button=false, onClose = () => { }, callback = () => { return false } } = props;\n const [open, setOpen] = useState(false);\n\n\n const closeMenu = () => {\n if (open) {\n setOpen()\n }\n }\n\n const outsideToggle = () => {\n if (vistoggle === \"close\") {\n setVistoggle(\"\");\n onClose();\n closeMenu();\n }\n }\n\n useEffect(closeMenu, [history.location.pathname])\n\n\n useEffect(outsideToggle, [vistoggle])\n\n\n // useEffect(() => {\n // function handleClickOutside(e) {\n // if (open) {\n // console.log(\"CALLED!!\")\n // setOpen(false);\n // onClose();\n // }\n // console.log(\"click\");\n\n // }\n // document.addEventListener(\"click\", handleClickOutside);\n // return () => {\n // document.removeEventListener(\"click\", handleClickOutside);\n // };\n // }, []);\n\n\n\n\n return (\n
{\n e.preventDefault();\n e.stopPropagation();\n if (callback()) {\n setOpen(false);\n }\n }} onMouseLeave={() => {\n if (hover) {\n onClose();\n setOpen(false)\n }\n }}>\n\n \n
setOpen(false)} onMouseEnter={() => setOpen(true)}>{title}
\n
\n {props.children}\n
\n
\n\n \n setOpen(!open)}>{title}\n
\n {props.children}\n
\n
\n \n\n {/* */}\n\n \n \n \n\n \n
{setOpen(!open); onOpen(); }}>{(active) ? {active}   : \"\"}\n {title}\n
\n
\n\n\n
\n
{onClose(); setOpen(false)}} className=\"mask-overlay\" style={{ \"zIndex\": \"-1\" }}>mask
\n
\n \n \n
\n {label}\n
\n
\n \n
\n {(open) ? props.children : \"\"}\n
\n \n\n
\n
\n\n\n
\n )\n}","import { Dropdown, Input, Menu } from \"antd\";\nimport React, { useState } from \"react\";\nimport { getMemory, saveMemory } from \"../utils/Utils\";\nimport { CaretDownOutlined } from '@ant-design/icons';\nexport default function RememberInput(props) {\n\n\n const {record = {}, updateOrder = () => {}, saveOrder = () => {}} = props; \n\n const [note, setNote] = useState(record.order_note);\n\n const drawRemembered = () => {\n let notes = getMemory(\"notes\");\n if (!notes.length === 0) {\n return <>;\n }\n\n return (\n {\n return (\n {\n setNote(e.key);\n updateOrder(record.key, \"order_note\", e.key)\n saveOrder();\n }}>\n {notes.map((item, index) => {\n return ({item})\n })}\n \n )\n }}>\n \n Last notes \n \n \n\n )\n }\n\n\n return (<>\n\n\n\n
\n
\n
\n Order Note\n {drawRemembered()}\n
\n
\n
\n\n \n\n e.target.select()} onBlur={(e) => {\n if (e.target.value) {\n saveMemory(\"notes\", e.target.value);\n \n }\n saveOrder()\n }} value={note} onChange={(e) => {\n setNote(e.target.value);\n updateOrder(record.key, \"order_note\", e.target.value);\n saveOrder();\n }} placeholder=\"Order note...\" style={{ \"fontSize\": \"12px\" }} rows={3}>\n\n\n
\n
\n\n\n )\n}","import { Input, Popover, Button, Divider } from \"antd\";\nimport React, { useState, useEffect, useRef } from \"react\";\nimport { getMemory, saveMemory } from \"../utils/Utils\";\n\n\nexport default function NumPicker(props) {\n\n \n\n const inputRef = useRef(null);\n const { disabled = false, value = 0, onChange = () => { }, autoFocus=false } = props;\n\n const [val, setVal] = useState((value) ? value : \"\");\n const [hover, setHover] = useState(false);\n\n const memory = getMemory(\"numpicker\");\n const defaults = [10, 12, 16, 18, 24, 36];\n\n let mergedSet = new Set([...memory, ...defaults]);\n let presets = Array.from(mergedSet).slice(0, 6);\n // presets = presets.sort();\n\n useEffect(() => {\n setVal(value)\n }, [value]);\n\n const change = (_v) => {\n handleHover(false)\n addMemory(_v);\n onChange(_v);\n }\n\n const addMemory = (_val) => {\n _val = Number(_val);\n if (!isNaN(_val) && typeof _val === 'number' && _val >= 10 && _val <= 99) {\n saveMemory(\"numpicker\", _val)\n }\n }\n\n const handleVal = (_e, _update = false, _blur = false) => {\n let v = _e.target.value.replace(/[^0-9]/g, '');\n\n if (_blur && (v == value)) {\n // if value matches on blur, don't update (already up to date)\n _update = false;\n }\n if (_update) {\n // onChange will set the local val pointless to set it twice\n addMemory(v);\n handleHover(false);\n change(v);\n } else {\n setVal(v);\n }\n };\n\n const handleKeyPress = (_e) => {\n if (_e.key === 'Enter') {\n handleVal(_e, true);\n }\n };\n\n const handleHover = (_v) => {\n if (_v !== hover) {\n setHover(_v);\n }\n }\n\n const NumBtn = (props) => {\n const { num = 0 } = props\n return ()\n }\n\n const MemBtn = (props) => {\n const { index = 0 } = props;\n let _val = presets[index];\n return ()\n }\n\n const handleMouseLeave = () => {\n if (inputRef.current) {\n inputRef.current.blur();\n }\n };\n\n const content = (\n <>\n
handleMouseLeave()} style={{ \"padding\": \"3px\" }}>\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n\n
\n
\n \n
\n
\n\n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n \n )\n\n \n\n return (\n <>\n \n handleKeyPress(e)}\n mouseEnterDelay={0}\n onBlur={(e) => handleVal(e, true, true)}\n onFocus={(e) => e.target.select()}\n onChange={(e) => handleVal(e)}\n value={(val != false) ? val : \"\"}\n style={{ \"width\": \"30px\", \"fontSize\": \"11px\", \"height\": \"23px\", \"marginTop\": \"3px\", \"padding\": \"0px 5px\" }}\n className={(disabled) ? \"tinyInput\" : \"tinyInput highlightQty\"} />\n \n \n )\n}","\n// store/cart/setForIsbn\n// mandatory params: isbn, data.\n// data is an array like\n// [\n// \t\t\t'id' => (int),\n// \t\t\t'supplier' => (string),\n// \t\t\t'sell_price' => (float),\n// \t\t\t'pubprice' => (float),\n// \t\t\t'discount' => (string),\n// \t\t\t'order_group' => (string),\n// \t\t\t'multistore_quantity' => [\n// \t\t\t\t['san' => 'quantity']\n// \t\t\t],\n// \t\t\t'shipto_name' => (string),\n// \t\t\t'cust_po' => (string),\n// \t\t\t'order_notes' => (string)\n// ]\n// optional params: cat_1, cat_2, notes\n\n\nimport React, { useState, useEffect, useRef } from \"react\";\nimport { Select, Input, Space, Menu, Button, Table, Row, Col, AutoComplete, Tag, Typography, Divider, Dropdown, message, Tooltip } from \"antd\";\nimport { CloseOutlined, CloseCircleFilled, CaretDownOutlined, CaretUpOutlined, CopyOutlined } from '@ant-design/icons';\nimport { getGroups, getMemory, isNumeric, saveMemory } from \"../utils/Utils\";\nimport Pubstock from \"./Pubstock\";\nimport { makeKey } from \"../utils/Utils\";\nimport { useSession } from \"../utils/Session\";\nimport Splitter from \"../utils/Splitter\";\nimport conditional from \"../utils/conditional\";\nimport OrderSearchUser from \"./OrderSearchUser\";\nimport CategorySelector from \"./CategorySelector\";\nimport { apiCall } from \"../utils/Api\";\nimport QuickPick from \"./QuickPick\";\nimport Cookies from \"js-cookie\";\nimport { usePrefs } from \"../utils/Prefs\";\nimport DropMenu from \"./DropMenu\";\nimport { useForm } from \"antd/lib/form/Form\";\nimport RememberInput from \"./RememberInput\";\nimport NumPicker from \"../tools/NumPicker\";\nimport GroupPicker from \"../tools/GroupPicker\";\nimport BMNoteCats from \"./title/BMNoteCats\";\nimport Conditions from \"./Conditions\";\n\n\nexport default function TestOrderBox(props) {\n\n const { data = {}, isbn, close = () => { }, wrap = false, cart_update = false, setResults = () => {} } = props;\n const { series = \"\", sales = [] } = data;\n const { suggested_bm_data = { class_1: \"\", class_1: \"\" } } = data;\n const [timer, setTimer] = useState(false);\n const [rerender, setRerender] = useState(false);\n const is_multistore = (window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).length > 1);\n const [session, setSession] = useSession();\n const { price = \"\", list_price_usa = \"\" } = data;\n\n const [quantityInput, setQuantityInput] = useState(false);\n\n const [condition, setCondition] = useState(\"\");\n let _default_notes = \"\";\n let _default_class_1 = \"\";\n let _default_class_2 = \"\";\n\n if (sales.length > 0) {\n if (sales[0].hasOwnProperty(\"bm_data\")) {\n if (sales[0].bm_data.hasOwnProperty(\"notes\")) {\n if (sales[0].bm_data.notes !== null) {\n _default_notes = sales[0].bm_data.notes || \"\";\n }\n }\n if (sales[0].bm_data.hasOwnProperty(\"class_1\")) {\n if (sales[0].bm_data._default_class_1 !== null) {\n _default_class_1 = sales[0].bm_data.class_1 || \"\";\n }\n }\n if (sales[0].bm_data.hasOwnProperty(\"class_2\")) {\n if (sales[0].bm_data._default_class_2 !== null) {\n _default_class_2 = sales[0].bm_data.class_2 || \"\";\n }\n }\n }\n }\n\n const updateCondition = (_cond) => {\n setCondition(_cond);\n let _note = \"\"\n let _category = \"\"\n let _subcategory = \"\"\n let _find = sales.findIndex(item => {\n if (item.hasOwnProperty(\"bm_data\")) {\n if (item.hasOwnProperty(\"code\")) {\n if (item.code === _cond) {\n if (item.bm_data.hasOwnProperty(\"notes\")) {\n _note = item.bm_data.notes\n }\n if (item.bm_data.hasOwnProperty(\"class_1\")) {\n _category = item.bm_data.class_1;\n }\n if (item.bm_data.hasOwnProperty(\"class_2\")) {\n _subcategory = item.bm_data.class_2;\n }\n return true;\n }\n }\n }\n })\n if (_find > -1) {\n setNote(_note);\n setCategory(_category);\n setSubCategory(_subcategory);\n } else {\n setNote(_default_notes);\n setCategory(_default_class_1);\n setSubCategory(_default_class_2);\n }\n }\n\n const getStoreNum = () => {\n let _f = window.sitesettings.stores.find(item => item.cid === session.store_id);\n if (_f) {\n if (_f.hasOwnProperty(\"store_number\")) {\n return _f.store_number;\n } else {\n return 0\n }\n } else {\n return 0;\n }\n }\n\n const storeNum = getStoreNum();\n const [selectedFocus, setSelectedFocus] = useState(false)\n const [expanded, setExpanded] = useState([]);\n const [selectedKey, setSelectedKey] = useState(\"\");\n const [view, setView] = useState(\"notes\");\n const [defaultKey, setDefaultKey] = useState(makeKey());\n const [loading, setLoading] = useState(false);\n const [currentSave, setCurrentSave] = useState({})\n // Bisac\n const [category, setCategory] = useState(_default_class_1);\n const [subCategory, setSubCategory] = useState(_default_class_2);\n const [note, setNote] = useState(_default_notes);\n\n const [prefs, setPrefs] = usePrefs();\n\n const setSave = () => {\n setCurrentSave(saveOrder(false));\n }\n\n useEffect(setSave, [])\n\n function isObject(val) {\n return val instanceof Object;\n }\n\n const saveOrder = (_send = true, _suppliers_obj = selectedSuppliers, _check = false) => {\n let obj = {};\n obj.isbn = isbn;\n\n if (note) {\n saveMemory(\"inventory_note\", note);\n }\n obj.data = [];\n _suppliers_obj.forEach((item, index) => {\n if (!item.supplier || !item.quantity) {\n // missing required fields, ignore\n return;\n }\n let _dataitem = {}\n if (item.hasOwnProperty(\"id\") && item.id) {\n _dataitem.id = item.id;\n } else {\n // for new rows\n _dataitem.id = \"\";\n }\n _dataitem.quantity = item.quantity;\n _dataitem.supplier = item.supplier;\n if (item.sell_price) {\n saveMemory(\"sell_price\", item.sell_price);\n }\n _dataitem.sell_price = item.sell_price;\n _dataitem.pubprice = item.supplier_price;\n _dataitem.discount = item.discount;\n _dataitem.order_group = item.group;\n // optional\n _dataitem.shipto_name = item.customer_name;\n _dataitem.cust_po = item.customer_po;\n _dataitem.order_notes = item.order_note;\n _dataitem.multistore_quantity = [];\n\n // not a multistore, but set multistores array qty to match item qty\n if (!is_multistore) {\n item.stores = [{\n [window.sitesettings.stores.filter(item => item.cart_active || item.is_primary)[0].san]: _dataitem.quantity\n }];\n }\n\n if (item.stores.length > 0 && isObject(item.stores[0])) {\n\n\n _dataitem.multistore_quantity = item.stores;\n } else {\n window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).forEach((itn, ind) => {\n _dataitem.multistore_quantity.push(\n {\n [itn.san]: item.stores[ind] || 0\n }\n )\n });\n }\n obj.data.push(_dataitem);\n })\n\n // convert data to json\n\n obj.data = JSON.stringify(obj.data);\n\n if (_send) {\n if ((_check && (JSON.stringify(obj) === currentSave))) {\n //JSON.stringify(obj) === currentSave\n return;\n }\n setLoading(true);\n apiCall(\"cart/setForIsbn\", obj, (_status, _result) => {\n if (_status) {\n setCurrentSave(JSON.stringify(_result));\n\n if(!wrap && cart_update){\n // set on underflows\n setSession({ ...session, \"cart\": _result });\n }\n\n if (wrap) {\n // Setting the session is slow so only use it on the pop-ups. \n setSession({ ...session, \"cart\": _result });\n // Clear prefs\n let _p = { ...prefs }\n if (_p.hasOwnProperty(\"cart\")) {\n delete _p.cart;\n }\n setPrefs(_p);\n }\n setPrefs({ ...prefs, \"cart\": _result });\n //close();\n //message.success(\"Cart updated.\")\n } else {\n message.error(_result.error);\n }\n setLoading(false);\n })\n } else {\n return JSON.stringify(obj);\n }\n }\n\n const saveSplitter = (_key, _stores, _qty) => {\n let m = [...selectedSuppliers];\n let _ind = m.findIndex(item => item.key === _key);\n if (_ind > -1) {\n m[_ind].stores = _stores;\n m[_ind].quantity = _qty\n }\n saveOrder(true, m);\n }\n\n const createNewSupplier = (_key) => {\n return (\n {\n \"key\": _key,\n \"id\": \"\",\n \"quantity\": 1,\n \"supplier\": \"\",\n \"group\": \"O\",\n \"supplier_price\": \"\",\n \"discount\": \"\",\n \"sell_price\": \"\",\n \"stores\": window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).map((item, index) => {\n\n return { [item.san]: (item.is_primary) ? 1 : 0 }\n }),\n \"profit_margin\": \"\",\n \"exchange\": 1,\n \"customer_name\": \"\",\n \"customer_po\": \"\",\n \"order_note\": \"\"\n }\n )\n }\n\n let init_suppliers = session.cart.find(item => item.isbn === isbn);\n\n const initialSuppliers = (init_suppliers) ? init_suppliers.suppliers.map(item => {\n return (\n {\n \"key\": (item.id) ? item.id : makeKey(),\n \"id\": item.id,\n \"quantity\": parseInt(item.quantity),\n \"supplier\": (item.location.length === 5) ? item.location.substr(0, 3) : item.location,\n \"group\": item.order_grp,\n \"supplier_price\": item.supplier_price,\n \"discount\": item.discount,\n \"sell_price\": item.sell_price,\n \"stores\": item.multistore_quantity,\n \"profit_margin\": item.profit_margin,\n \"exchange\": item.exchange,\n \"customer_name\": item.shipto_name,\n \"customer_po\": item.cust_po,\n \"order_note\": item.order_notes\n })\n }) : [];\n\n\n\n const [selectedSuppliers, setSelectedSuppliers] = useState(initialSuppliers.concat([createNewSupplier(defaultKey)]));\n\n\n const resetSelected = () => {\n if (initialSuppliers.length === 0) {\n setSelectedSuppliers(initialSuppliers.concat([createNewSupplier(defaultKey)]));\n } else {\n setSelectedSuppliers(initialSuppliers);\n }\n }\n\n useEffect(resetSelected, [session.cart])\n\n const is_saved = (JSON.stringify(initialSuppliers.filter(item => item.quantity > 0), null, 2) === JSON.stringify(selectedSuppliers.filter(item => item.quantity > 0), null, 2))\n\n const timerSaveOrder = () => {\n if (window.saveTimout) {\n window.clearTimeout(window.saveTimout);\n }\n window.saveTimout = window.setTimeout(saveOrder, 500);\n }\n\n const selectSupplier = (_supplier, _new = false, _increment_if_exists = true, _overide_group = \"\", _focus = false) => {\n // Set Notes Field if it matches the suppliers conditions in settings\n let _supacct = _supplier.acct;\n if (_supacct.length === 5) {\n _supacct = _supacct.substr(0, 3);\n }\n let _f = window.sitesettings.supplier_conditions.find(item => item.supplier_code === _supacct);\n if (_f) { updateCondition(_f.condition_code); } else {\n if (condition) {\n updateCondition(\"\");\n }\n }\n setPrefs({ ...prefs, \"last_used\": _supplier.acct })\n // tobias (13jun2023): local prefs isn't updated by setPrefs so manually sync their state (see web/issues#1902)\n prefs.last_used = _supplier.acct;\n // check if matches group / supplier then increment\n // qp, cookie or O\n let _group = session.quick_picks.find(item => item.supplier === _supplier.acct);\n _group = (_group) ? _group.group : (getMemory(\"group\").length > 0) ? getMemory(\"group\")[0] : \"O\";\n let check = selectedSuppliers.find(item => (item.group === _group && item.supplier.substr(0, 3) === _supplier.acct.substr(0, 3)));\n if (check && _increment_if_exists) {\n setSelectedKey(check.key);\n if (_focus) {\n setSelectedFocus(check.key);\n if (Cookies.get(\"pin_splitter\") === \"yes\") {\n setExpanded([check.key])\n }\n } else {\n setSelectedFocus(false)\n }\n updateOrder(check.key, \"quantity\", parseInt(check.quantity) + 1);\n timerSaveOrder();\n //saveOrder();\n return;\n }\n\n if (!_increment_if_exists) {\n _group = _overide_group;\n }\n\n if (!currentPrice) {\n setCurrentPrice(_supplier.sell_price);\n }\n\n let key = makeKey();\n setSelectedKey(key);\n if (_focus) {\n setSelectedFocus(key);\n if (Cookies.get(\"pin_splitter\") === \"yes\") {\n setExpanded([key])\n }\n } else {\n setSelectedFocus(false)\n }\n if (_new) {\n let n = createNewSupplier()\n }\n let supplier = {\n \"key\": key,\n \"id\": \"\",\n \"quantity\": 1,\n \"supplier\": (_supplier.acct.length === 5) ? _supplier.acct.substr(0, 3) : _supplier.acct,\n \"group\": _group,\n \"stores\": window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).map((item, index) => {\n return { [item.san]: (item.is_primary) ? 1 : 0 }\n }),\n \"supplier_price\": (_supplier.supplier_price) ? _supplier.supplier_price : 0,\n \"discount\": (_supplier.discount) ? _supplier.discount : 0,\n \"sell_price\": (currentPrice) ? currentPrice : _supplier.sell_price,\n \"profit_margin\": (_supplier.profit_margin) ? _supplier.profit_margin : 0,\n \"exchange\": (_supplier.exchange) ? _supplier.exchange : 1,\n \"customer_name\": \"\",\n \"customer_po\": \"\",\n \"order_note\": \"\"\n }\n let m = [...selectedSuppliers];\n let _find = m.find(item => item.supplier === \"\");\n let u = 0;\n if (_find) { u = 1; }\n if (m[m.length - 1].supplier === \"\") {\n m.splice(selectedSuppliers.length - u, 0, supplier)\n } else {\n m.splice(selectedSuppliers.length - u, 0, supplier)\n }\n if (m.length > 1 && _find) {\n // remove it\n m = m.filter(item => item.supplier !== \"\");\n }\n setSelectedSuppliers(m);\n saveOrder(true, m);\n }\n\n let add_new = false;\n const [currentPrice, setCurrentPrice] = useState(0);\n const updatePrice = (_price, _updateSupplier = false) => {\n setCurrentPrice(_price);\n let _sup = [...selectedSuppliers]\n for (let i = 0; i < _sup.length; i++) {\n // don't update the blank\n if (_sup[i].quantity) {\n if (_updateSupplier) {\n // update supplier price\n _sup[i].supplier_price = _price;\n } else {\n // update sell price\n _sup[i].sell_price = _price;\n }\n let new_profit_margin = calculateProfitMargin(_price, _sup[i].supplier_price, _sup[i].discount, _sup[i].exchange);\n _sup[i].profit_margin = new_profit_margin;\n }\n }\n setSelectedSuppliers(_sup);\n }\n\n const updateOrder = (_key, _field, _value, _save = false) => {\n let _order = selectedSuppliers.find(item => item.key === _key);\n let _index = selectedSuppliers.findIndex(item => item.key === _key);\n switch (_field) {\n case \"group\":\n saveMemory(\"group\", _value);\n break;\n case \"quantity\":\n // ensure it's a number, flag if not a number\n _value = (isNaN(_value)) ? \"~\" : _value;\n break;\n case \"sell_price\":\n // ensure it's a number, flag if not a number\n _value = (isNaN(_value)) ? \"~\" : _value;\n // re-caulutate profit margin if not flagged\n if (_value !== \"~\") {\n let new_profit_margin = calculateProfitMargin(_value, _order.supplier_price, _order.discount, _order.exchange);\n _order.profit_margin = new_profit_margin;\n }\n break;\n case \"profit_margin\":\n // ensure it's a number, flag if not a number\n _value = (isNaN(_value)) ? \"~\" : _value;\n // re-caulutate sell price if not flagged\n if (_value !== \"~\") {\n if (_value < -1) {\n _value = 0;\n }\n if (_value > 99) {\n _value = 99;\n }\n let new_sell_price = calculateSellPrice(_order.supplier_price, _order.discount, _value, _order.exchange);\n _order.sell_price = new_sell_price;\n }\n case \"supplier_price\":\n // ensure it's a number, flag if not a number\n _value = (isNaN(_value)) ? \"~\" : _value;\n // re-caulutate sell price & profit margin if not flagged\n if (_value !== \"~\") {\n let new_profit_margin = calculateProfitMargin(_order.sell_price, _value, _order.discount, _order.exchange);\n _order.profit_margin = new_profit_margin;\n }\n break;\n case \"discount\":\n if (_value == 'BX' || _value == 'RG' || _value == '') {\n _value = 40;\n }\n if (_value == 'NT') {\n _value = 0;\n }\n _value = _value.replace(\".\", \"\");\n // ensure it's a number, flag if not a number\n _value = (isNaN(_value)) ? \"~\" : _value;\n // re-caulutate sell price & profit margin if not flagged\n if (_value !== \"~\") {\n let new_profit_margin = calculateProfitMargin(_order.sell_price, _order.supplier_price, _value, _order.exchange);\n _order.profit_margin = new_profit_margin;\n }\n break;\n }\n\n if (_order) {\n if (_value !== \"~\") {\n _order[_field] = _value;\n }\n }\n\n let m = [...selectedSuppliers];\n m.splice(_index, 1, _order)\n\n // If user edits the blank, add a new key\n if (_order.key === defaultKey) {\n let add_key = makeKey();\n setDefaultKey(add_key);\n m.push(createNewSupplier(add_key))\n }\n\n setSelectedSuppliers(m);\n\n if (_save) {\n console.log(\"Save\")\n saveOrder(true, m);\n }\n return;\n return _value;\n }\n\n const addNewBlank = () => {\n return;\n }\n\n const incQuantity = (_key, _amt) => {\n let _order = selectedSuppliers.find(item => item.key === _key);\n if (_order.quantity === \"\") {\n _order.quantity = 0;\n }\n let _value = Math.min(Math.max(parseInt(_order.quantity) + parseInt(_amt), 0), 999);\n updateOrder(_key, \"quantity\", _value);\n }\n\n const clearOrder = (_key) => {\n let m = [...selectedSuppliers];\n m = m.filter(item => item.key != _key)\n if (m.length === 0) {\n let _default = [createNewSupplier(makeKey())];\n setSelectedSuppliers(_default);\n saveOrder(true, _default);\n } else {\n setSelectedSuppliers(m.filter(item => item.key != _key))\n saveOrder(true, m.filter(item => item.key != _key));\n }\n setExpanded([]);\n }\n\n const addBlankRow = () => {\n let m = [...selectedSuppliers];\n m.push(createNewSupplier(makeKey()))\n setSelectedSuppliers(m);\n }\n\n //Supl, Grp, Qty, Sell, PM, SuppPr, Disc, QP-Grp\n\n const drawGroupLabel = (_item, _f) => {\n // No customer\n if (!_f.customer_name) {\n return _item;\n }\n // Has customer, but not a store\n if (!isNumeric(_item)) {\n return _item;\n }\n // Has customer, but is current store\n if (isNumeric(_item) && _item == storeNum) {\n return _item;\n }\n return (
e.stopPropagation()} style={{ \"opacity\": \"0.5\", \"cursor\": \"not-allowed\" }}>{_item}
)\n }\n\n const [orderBtn, setOrderBtn] = useState(true);\n\n\n const drawNotesLabel = (_f) => {\n if (_f.customer_name || _f.customer_po || _f.order_note) {\n return (<>Notes)\n } else {\n return (<>Notes)\n }\n }\n\n const columns = [\n {\n title: Supp, width: \"55px\", key: 'supplier', dataIndex: 'supplier', render: (e, f) => {\n\n if ((!wrap) && orderBtn && (!e)) {\n return (Only use this to create orders for non-Pubstock vendors that do not appear in the list below. Otherwise, click a vendor from the list below to create orders.}> setOrderBtn(false)} style={{ \"lineHeight\": \"15px\", \"cursor\": \"pointer\", \"margin\": \"0px 0px\" }} color={\"#333\"} size=\"small\">Order)\n }\n return
e.target.select()} onBlur={(e) => {\n\n if (e.target.value.length > 2 && e.target.value.length < 6) {\n let sup = e.target.value\n if (e.target.value.length === 5) {\n sup = sup.substring(0, 3);\n }\n\n setPrefs({ ...prefs, \"last_used\": e.target.value })\n }\n saveOrder()\n\n }} onChange={(_e) => {\n\n if (_e.target.value.length > 0 && Cookies.get(\"pin_splitter\") === \"yes\") {\n setExpanded([f.key]);\n }\n updateOrder(f.key, \"supplier\", _e.target.value.toUpperCase())\n\n }} className=\"tinyInput\" value={e} size=\"small\">
;\n }\n },\n\n // {\n // title: Grp, key: 'group', width: \"40px\", dataIndex: 'group', render: (e, f) => {\n\n // return
\n // }\n // },\n\n {\n title: Grp, key: 'group', width: \"40px\", dataIndex: 'group', render: (e, f) => {\n\n return ( updateOrder(f.key, \"group\", _v, true)} />)\n\n return
saveOrder()} //\n onFocus={(e) => e.target.select()}\n // autoFocus={(selectedKey === f.key)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n disabled={!(f.supplier)}\n onChange={(_g) => {\n\n if (getGroups().includes(_g.toUpperCase())) {\n updateOrder(f.key, \"group\", _g.toUpperCase())\n }\n\n }} //\n style={{ width: \"30px\", \"fontSize\": \"11px\", \"height\": \"23px\", \"marginTop\": \"3px\" }}\n className={\"tinyAutocomplete\"}\n dropdownClassName=\"tinyDropdown\"\n size=\"small\"\n options={getGroups().map(item => {\n return {\n value: item,\n label: drawGroupLabel(item, f),\n\n }\n })}\n />
\n\n return addNewBlank()} onChange={(_e) => updateOrder(f.key, \"quantity\", _e.target.value)} className=\"tinyInput\" value={e} size=\"small\">;\n }\n },\n\n {\n title: Qty, key: 'quantity', width: \"40px\", dataIndex: 'quantity', render: (e, f) => {\n\n return
\n\n\n { setQuantityInput(!quantityInput); updateOrder(f.key, \"quantity\", _v, true); }} />\n {/* saveOrder(true, selectedSuppliers, true)}\n onFocus={(e) => e.target.select()}\n autoFocus={(selectedKey === f.key)}\n onKeyDown={(e) => {\n\n if (e.key === \"Enter\") {\n updateOrder(f.key, \"quantity\", e.target.value)\n e.currentTarget.blur();\n }\n\n }}\n disabled={!(f.supplier)}\n onChange={(_e) => updateOrder(f.key, \"quantity\", _e)}\n style={{ width: \"30px\", \"fontSize\": \"11px\", \"height\": \"23px\", \"marginTop\": \"3px\" }}\n className={(f.supplier && (e > 0)) ? \"tinyAutocomplete highlightInput\" : \"tinyAutocomplete\"}\n dropdownClassName=\"tinyDropdown\"\n size=\"small\"\n options={[{ value: 0 }, { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }, { value: 5 }, { value: 6 }, { value: 7 }, { value: 8 }, { value: 9 }, { value: 10 }, { value: 11 }, { value: 12 }]}\n /> */}\n\n
\n\n return addNewBlank()} onChange={(_e) => updateOrder(f.key, \"quantity\", _e.target.value)} className=\"tinyInput\" value={e} size=\"small\">;\n }\n },\n\n {\n title: Sell, width: \"55px\", key: 'sell_price', dataIndex: 'sell_price', render: (e, f) => {\n\n return saveOrder()}\n onFocus={(e) => e.target.select()}\n onChange={(_e) => updatePrice(_e)}\n style={{ width: \"45px\", \"fontSize\": \"11px\", \"textAlign\": \"left\" }}\n className=\"tinyAutocomplete\"\n dropdownClassName=\"tinyDropdown\"\n size=\"small\"\n options={\n getMemory(\"sell_price\").map(val => {\n return { value: val }\n })}\n />\n\n\n return updatePrice(_e.target.value)} className=\"tinyInput\" value={e} size=\"small\">;\n }\n },\n\n {\n title: PM, key: 'profit_margin', width: \"35px\", dataIndex: 'profit_margin', render: (e, f) => {\n\n if (!f.supplier) {\n return
0%
\n }\n return
{(e) ? <>{e}% : \"\"}
;\n }\n },\n\n\n\n {\n title: SupPr, key: 'supplier_price', width: \"55px\", dataIndex: 'supplier_price', render: (e, f) => {\n\n\n\n return
saveOrder()}\n onFocus={(e) => e.target.select()}\n onChange={(_e) => updateOrder(f.key, \"supplier_price\", _e)}\n className=\"tinyAutocomplete\"\n dropdownClassName=\"tinyDropdown\"\n size=\"small\"\n options={getMemory(\"sell_price\").map(val => {\n return { value: val }\n })}\n />
\n\n\n }\n },\n\n\n {\n title: Disc, key: 'discount', width: \"45px\", dataIndex: 'discount', render: (e, f) => {\n return e.target.select()} onChange={(_e) => {\n updateOrder(f.key, \"discount\", _e.target.value)\n }} className=\"tinyInput\" value={e} size=\"small\">;\n }\n },\n // {\n // title: Split, key: 'split', dataIndex: 'split', render: (e, f) => {\n // return <>;\n // }\n // },\n // {\n // title: Notes, key: 'notes', dataIndex: 'notes', render: (e, f) => {\n // return <>;\n // }\n // },\n {\n title: , key: 'key', dataIndex: 'key', render: (e, f) => {\n return   
)\n // return (i === (selectedSuppliers.length - 1)) ?
: \"\";\n }\n },\n\n {\n title: QP-Grp, key: 'quickpick', width: \"66px\", dataIndex: 'quickpick', render: (e, f) => {\n return
\n }\n },\n\n ]\n\n const calculateSellPrice = (_publish_price, _discount, _profit_margin, _exchange) => {\n if (_discount == 'BX' || _discount == 'RG' || _discount == '') {\n _discount = 40;\n }\n if (_discount == 'NT') {\n _discount = 0;\n }\n _discount -= 0;\n var sellp = - (_exchange * _publish_price * ((100 - _discount) / 100)) / ((_profit_margin / 100) - 1);\n if (isNaN(sellp)) {\n return '';\n }\n return sellp.toFixed(2);\n }\n\n const calculateProfitMargin = (_sell_price, _publish_price, _discount, _exchange) => {\n if (_discount == 'BX' || _discount == 'RG' || _discount == '') {\n _discount = 40;\n }\n if (_discount == 'NT') {\n _discount = 0;\n }\n _discount -= 0;\n _sell_price -= 0;\n if (!_sell_price) {\n return '';\n }\n var pm = 1 - ((_exchange * _publish_price * ((100 - _discount) / 100)) / _sell_price);\n pm = Math.round(pm * 100);\n if (isNaN(pm)) {\n pm = '';\n }\n // 100 is impossible, max should be 99\n if (pm === 100) {\n pm = 99;\n }\n return pm;\n }\n\n\n const expandCell = (_data) => {\n\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n\n }\n\n\n\n const drawChildTable = (_record) => {\n\n\n return (\n
\n item.cart_active || item.is_primary).length > 1 && _record.supplier)}>\n
\n {((window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).length > 1) && )}\n
\n
\n\n\n
0 && expanded[0] === _record.key) ? \"auto\" : \"0px\", \"overflowY\": \"hidden\" }}>\n
\n\n )\n\n }\n\n const saveCategoriesNotes = (_notes = note, _category = category, _subcategory = subCategory, skip_note = false, guess = false) => {\n\n if (skip_note) {\n _notes = note;\n }\n\n let obj = {};\n obj.isbn = isbn;\n\n if (_category) {\n\n if (obj.notes !== null) {\n obj.notes = _notes;\n }\n\n obj.class_1 = _category;\n\n if (obj.class_2 !== null) {\n obj.class_2 = _subcategory;\n }\n\n }\n\n if (!_category) {\n obj.notes = \"\";\n obj.class_1 = \"\"\n obj.class_2 = \"\"\n }\n\n obj.exact_match = guess;\n obj.condition_code = condition;\n\n apiCall(\"title/saveCategoriesNotes\", obj, (_status, _result) => {\n if (_status) {\n\n } else {\n message.error(_result.error);\n }\n })\n\n }\n\n\n\n const drawHeader = () => {\n\n return (\n
\n Cart\n
\n )\n }\n\n\n const drawFooter = () => {\n\n\n\n // return (\n //
\n //
\n //
\n // \n // \n // \n // \n // \n\n // e.target.select()}\n // onChange={(e) => setNote(e)}\n\n // onBlur={(e) => saveCategoriesNotes(e.target.value)}\n // placeholder={(category) ? \"Inventory note...\" : \"Select class before adding a note...\"}\n // style={{ \"width\": \"100%\", \"fontSize\": \"12px\", \"height\": \"20px\", \"textAlign\": \"left\", \"marginTop\": \"0px\" }}\n // dropdownClassName=\"tinyDropdown\"\n // className=\"inputsmall\"\n // allowClear={false}\n // size=\"small\"\n // options={(series) ? [{ value: series, label: <>Series: {series} }].concat(getMemory(\"inventory_note\").map(val => {\n // return { value: val }\n // })) : [].concat(getMemory(\"inventory_note\").map(val => {\n // return { value: val }\n // }))}\n // />\n\n\n\n // {/* setNote(e.target.value)} /> */}\n\n // \n\n // \n\n // {/* Class: */}\n\n // \n // \n // \n //
\n //
\n //
\n // )\n }\n\n\n const getColorBar = () => {\n\n\n let _bc = \"5px solid #eee\"\n if (Cookies.get(\"darkmode\") === \"true\") {\n _bc = \"5px solid #444\"\n }\n\n if (loading) {\n return _bc;\n }\n\n let count = selectedSuppliers.filter(item => item.supplier);\n\n if (count.length > 0) {\n return \"5px solid #3C8617\";\n } else {\n\n return _bc;\n }\n\n\n }\n\n\n const RememberCats = () => {\n\n const callback = (_code, _category, _subcategory, _notes) => {\n let _a = [...data.conditions];\n let _f = _a.findIndex(item => item.code === _code);\n if(_f > -1){\n _a[_f].category = _category;\n _a[_f].subcategory = _subcategory;\n _a[_f].notes = _notes;\n setResults({...data, \"conditions\" : _a});\n }\n }\n\n return (\n <>\n {data.conditions.map(condition => { \n return (\n
\n
{condition.code_text}:
\n
0) ? \"1px solid\" : \"none\" }} className=\"bc\" >
\n
\n
\n )\n })}\n \n )\n }\n\n\n const draw = () => {\n\n\n\n\n return (\n
\n\n
\n\n\n (record.key === selectedKey) ? \"selectedRow\" : \"\"}\n expandedRowKeys={selectedSuppliers.map(item => item.key)}\n expandIconColumnIndex={-1}\n expandIcon={() => { return (<>) }}\n expandedRowRender={(record) => drawChildTable(record)}\n />\n
\n {(wrap && <>
)}\n
\n \n
\n
\n )\n }\n\n\n if (wrap) {\n return (\n
\n Order: {(data.title) ? data.title : \"\"} ({isbn})\n \n\n \n \n
Cart:
\n {draw()}\n
\n
\n \n \n \n
\n
\n\n
\n )\n }\n\n\n return draw();\n\n}","import { Tabs } from \"antd\";\nimport React, { useState } from \"react\";\n\nimport Pubstock from \"./Pubstock\";\nimport TestOrderBox from \"./TestOrderBox\";\n\nexport default function Extras(props) {\n\n const { data = {}, isbn = \"\", cart_update = false } = props;\n\n const [active, setActive] = useState(\"order\");\n\n const toggleActive = (e) => {\n if (active === e) {\n setActive(\"order\")\n } else {\n setActive(e);\n }\n }\n\n return (\n <>\n toggleActive(e)} tabBarStyle={{ \"padding\": \"0px\", \"marginBottom\": \"0px\", \"borderBottom\": \"0px\" }} size=\"small\" type=\"card\" activeKey={active}>\n Order} key=\"order\">\n
\n \n
\n
\n Pubstock} key=\"pubstock\">\n
\n \n
\n
\n Stores} key=\"stores\">\n
\n
\n
\n \n );\n}","import React, { useState, useEffect } from \"react\";\nimport { Col, message, Row, Space, Tooltip, Spin, Tag } from \"antd\";\nimport { FilterFilled, FilterOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport nocover from \"../../media/no-cover.png\";\nimport moment from \"moment\";\nimport { bestsellerColor, bmDate, parseAuthors, parseSubjects } from \"../../utils/Utils\";\nimport conditional from \"../../tools/conditional\";\nimport { ucfirst } from \"../../utils/Utils\";\nimport ItemHistory2 from \"../ItemHistory2\";\nimport SalesActivity from \"../SalesActivity\";\nimport Overlay from \"../Overlay\";\nimport PeerSales from \"../PeerSales\";\nimport Html from \"../../utils/Html\";\nimport { itemdata } from \"../../data\";\nimport { useSession } from \"../../utils/Session\";\nimport { LoadingOutlined } from '@ant-design/icons';\nimport logosmall from \"../../media/b.png\"\nimport BMNoteCats from \"./BMNoteCats\";\nimport { usePrefs } from \"../../utils/Prefs\";\n\nexport default function BMSummary(props) {\n\n const { data = {}, series = \"\", suggested_bm_data = {}, condition = \"\", condition_code = \"\", priority = true, isbn = \"\" } = props;\n const [session, setSession] = useSession();\n const [station, setStation] = useState((session.station_id) ? session.station_id : \"-\");\n const [stationLoading, setStationLoading] = useState(false);\n const [sent, setSent] = useState(false);\n const [prefs, setPrefs] = usePrefs(); \n\n message.config({\n top: 50,\n duration: 2,\n maxCount: 1\n })\n\n // auth, pubd\n\n\n const spinIcon = ;\n\n\n const changeStation = (_station) => {\n\n\n if (session.station_id.toString() === _station.toString()) {\n return;\n }\n\n setStationLoading(true);\n apiCall(\"bookmanager/setStationId\", { station_id: (station && station !== \"-\") ? station : -1 }, (_status, _result) => {\n if (_status) {\n setStation(\"-\");\n setSession(_result);\n openTitleInStation();\n setStationLoading(false);\n }\n })\n }\n\n const openTitleInStation = (_isbn, _condition = \"\") => {\n\n\n\n if (!station) {\n \n return;\n \n }\n\n if (isNaN(station)) {\n \n return;\n }\n\n\n if (!stationLoading) {\n setStationLoading(true);\n }\n\n setSent(true);\n\n setTimeout(() => {\n setSent(false)\n }, 1000);\n\n \n apiCall(\"bookmanager/sendIsbn\", { isbn: primary_key }, (_status, _result) => {\n if (_status) {\n setStationLoading(false);\n }\n })\n\n }\n\n\n\n\n const {\n primary_key = \"\",\n secondary_key = \"\",\n discount = \"\",\n used_condition = \"\",\n title = \"\",\n pubdate = \"\",\n author = \"\",\n binding = \"\",\n price = \"\",\n cost = \"\",\n sell_price = \"\",\n cost_locked = false,\n carton_quantity = 0,\n profit_cost_string = \"\",\n supplier_1 = \"\",\n supplier_2 = \"\",\n supplier_3 = \"\",\n class_1 = \"\",\n class_2 = \"\",\n section = \"\",\n out_of_stock_status = \"\",\n returnable = \"\",\n entered = \"\",\n received = \"\",\n onhand = 3,\n available_on_hand = 0,\n pending_on_order = 0,\n on_order = 0,\n special_order = 0,\n held = 0,\n pending_return = 0,\n backroom = 0,\n minimum_on_hand = 0,\n original_publisher = \"\",\n row_id = 0,\n notes = \"\",\n row_status = \"\"\n } = data;\n\n\n\n const conversion = {\n A: 'AVAI',\n B1: 'BOS',\n B2: 'BNYP',\n B3: 'BRP',\n B4: 'BITO',\n C1: 'COS',\n C2: 'CNYP',\n C3: 'CNOP',\n C4: 'CNR',\n C5: 'COP',\n C6: 'CNL',\n C7: 'CNW',\n C8: 'COSI',\n C9: 'CPXL',\n CA: 'CRP',\n CB: 'CITO',\n CC: 'CBU',\n CD: 'CBC'\n }\n\n const convertOSStat = (_osstat = \"\") => {\n if(conversion.hasOwnProperty(_osstat.toUpperCase())){\n return conversion[_osstat.toUpperCase()]; \n } else {\n return _osstat;\n }\n }\n\n\n const converted_out_of_stock_status = convertOSStat(out_of_stock_status);\n\n\n const parseUsedCondition = (_cond) => {\n if (!_cond) {\n return <> \n }\n if (_cond.includes(\"(\")) {\n let split = _cond.split(\"(\");\n return split[0];\n } else {\n return _cond;\n }\n }\n\n const drawPC = (_cost, _net) => {\n _cost = parseFloat(_cost);\n _net = parseFloat(_net);\n let _per = Math.round(100 - ((_cost / _net) * 100));\n let _prof = Math.round((_net - _cost) * 100);\n return \"PC\" + _per.toString() + _prof.toString().padStart(5, '0');\n }\n\n const drawCol = (_lbl, _val, _bg = \"#fafafa\", _color = \"#212121\", _border = true, bold = false, position = \"right\") => {\n if (!_val) {\n _val = <> ;\n _bg = \"#fafafa\";\n _color = \"#212121\"\n }\n return (\n <>\n\n \n
{_lbl}
\n
\n\n
{_val}
\n \n )\n }\n\n\n const drawNotes = (_notes = \"\") => {\n\n\n if (!_notes) {\n return \"\";\n }\n\n let flags = [\"^^\", \"//%\", \"//$\", \"//@\", \"//?\", \"//O\"];\n\n let _split = _notes.split(\" \");\n\n\n for (let i = 0; i < _split.length; i++) {\n flags.forEach(flag => {\n if (_split[i].substring(0, flag.length) == flag) {\n _split[i] = \"\" + _split[i] + \"\"\n }\n })\n }\n\n _notes = _split.join(\" \");\n\n return
;\n\n }\n\n\n const drawSales = (_prev = false) => {\n\n if (sell_price && _prev) {\n\n if (discount) {\n return drawValue(<>
({discount}% off ${price})
, \"center\")\n }\n return drawValue(<>
(reg. ${price})
, \"center\")\n }\n\n if (_prev) {\n return \"\";\n }\n\n return drawValue(
{(sell_price) ? \"$\" + sell_price.toString() : \"$\" + price.toString()}
, \"center\");\n }\n\n const drawLabel = (_val, _align = \"left\", _weight = \"normal\", _border = false) => {\n return (
{_val}:
)\n }\n\n const drawValue = (_val, _align = \"left\", _weight = \"normal\", _border = false) => {\n return (
{(_val) ? _val : <> }
)\n }\n\n\n\n return (\n <>\n \n\n
{condition}
\n\n\n
\n
\n\n \n \n\n {/* {(condition !== \"New\") && {drawValue(condition, \"left\", \"bold\")}} */}\n\n \n \n\n \n \n \n\n \n\n \n
\n openTitleInStation()} alt=\"bookmanager\" style={{ \"marginLeft\": \"-5px\", \"filter\": (session.station_id || session.station_id === 0) ? \"grayscale(0%)\" : \"grayscale(100%)\", \"cursor\": \"pointer\", \"marginTop\": \"-4px\", \"height\": \"17px\", \"width\": \"19px\" }} width={32} src={logosmall} />\n
\n
\n\n
\n\n \n
\n
\n e.target.select()} onBlur={(e) => changeStation(e.target.value)} onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }} value={(station !== \"-\") ? station : session.station_id} onChange={(e) => {\n if (isNaN(e.target.value)) {\n return;\n } else {\n if (e.target.value.length > 2) {\n return;\n } else {\n setStation(e.target.value)\n }\n }\n\n }} style={{ \"width\": \"23px\", \"textAlign\": \"center\", \"fontWeight\": \"bold\" }} className=\"bm-input\" />\n
\n
\n\n
\n
\n
\n
\n\n \n
Sent
\n
\n\n
\n\n
\n\n {/* \n
openTitleInStation()} style={{ \"color\": (station) ? \"#1b1b1b\" : \"#999\", \"cursor\": (station) ? \"pointer\" : \"inherit\", \"fontWeight\": \"600\", \"backgroundColor\": \"#eee\", \"fontSize\": \"11px\", \"lineHeight\": \"20px\" }}>\n BM\n
\n */}\n \n\n \n
\n \n\n\n
\n\n
{(section && {section})}
\n\n {/* {drawValue(drawNotes(notes))} */}\n \n
\n\n
{drawSales()}
\n
{drawSales(true)}
\n\n
\n \n\n\n\n\n\n {/* {drawValue((received) ? moment(received).format(\"MMM D-YY\") : \"\")} */}\n
\n \n \n\n \n \n
\n\n
\n \n
\n\n {/* drawLabel(\"1st Rcvd\") */}\n\n\n
\n\n\n \n \n {drawLabel(\"ISBN\")}\n {drawValue(primary_key)}\n {drawValue(secondary_key)}\n {drawLabel(\"PC\")}\n {drawValue(<>{profit_cost_string}  )}\n\n \n\n \n {drawLabel(\"Title\")}\n {drawValue(title)}\n {drawLabel(\"Bd\")}\n {drawValue(binding, \"right\")}\n {drawLabel(\"Entered\")}\n {drawValue((entered) ? bmDate(entered) : \"\")}\n \n\n \n\n {drawLabel(\"Auth\")}\n {drawValue(author)}\n {drawLabel(\"Pubdate\")}\n {drawValue(pubdate)}\n {drawLabel(\"O/S Stat\")}\n {drawValue(converted_out_of_stock_status)}\n \n\n \n {drawLabel(\"Supl\")}\n {drawValue((<>{(supplier_1 || \"\")}   {(supplier_2 || \"\")}   {(supplier_3 || \"\")}   ))}\n {drawLabel(\"Publ\")}\n {drawValue(original_publisher)}\n {drawLabel(\"Rtnbl\")}\n {drawValue(returnable)}\n {drawLabel(\"Crtn Qty\")}\n {drawValue({(carton_quantity) ? carton_quantity : \"\"})}\n \n\n \n
\n\n\n\n\n \n )\n\n\n\n\n}\n\n","import React, { useState } from \"react\";\nimport { Table, Row, Col, Tooltip } from \"antd\";\nimport { addKeys, ucfirst } from \"../utils/Utils\";\nimport moment from \"moment\";\nimport SalesActivity from \"./SalesActivity\";\nimport conditional from \"../tools/conditional\";\nexport default function ItemSales2(props) {\n\n\n\n const { condition = \"\", isbn = \"\", data = {}, summary = false, row = false } = props;\n\n const [showActivity, setShowActivity] = useState(false);\n\n\n const {\n draw_months = 14,\n is_forthcoming = false,\n extras = {\n total_onhand: 0,\n minimum_onhand: 0,\n backroom: 0,\n held: 0,\n available_onhand: 0,\n total_onorder: 0,\n pending_return: 0,\n special_order: 0,\n pending_onorder: 0\n },\n rows = []\n } = data;\n\n\n const abriviateClass = (_class) => {\n\n let ret = \"\";\n switch (_class) {\n case \"adjusted\": ret = \"Adj\"; break;\n case \"returns\": ret = \"Retn\"; break;\n case \"received\": ret = \"Rcvd\"; break;\n case \"sold\": ret = \"Sold\"; break;\n case \"total_sold\": ret = \"Ttl\"; break;\n case \"peer\": ret = \"Peer\"; break;\n }\n\n return ret;\n }\n\n\n\n\n const abriviateExtra = (_key) => {\n let ret = \"\";\n switch (_key) {\n case \"total_onhand\": ret = \"TtlOH\"; break;\n case \"minimum_onhand\": ret = \"MinOH\"; break;\n case \"backroom\": ret = \"BackRm\"; break;\n case \"held\": ret = \"Held\"; break;\n case \"pending_return\": ret = \"PndRtn\"; break;\n case \"special_order\": ret = \"S/O\"; break;\n case \"pending_onorder\": ret = \"PndOO\"; break;\n }\n return ret;\n }\n\n const parseData = () => {\n\n let is_multistore = false;\n if (window.sitesettings.stores.length > 1) {\n is_multistore = true;\n }\n let _store = 1;\n\n\n\n let _return = rows.map(item => {\n\n\n let _ret =\n {\n label: (item.class === \"sold\" && is_multistore) ? \" #\" + item.store_number : abriviateClass(item.class),\n ttl: (item.class === \"peer\") ? item.total_stores : item.total,\n class: item.class,\n wk: item.week,\n oh: item.onhand,\n oo: item.onorder,\n ohl: item.onhandlocs,\n ool: item.onorderlocs\n }\n\n if (item.class === \"sold\") {\n _store++;\n }\n\n item.months.forEach((item, index) => {\n _ret[\"s\" + (index + 1)] = (item) ? item : \"\";\n })\n\n return _ret;\n })\n\n if (row) {\n _return = _return.filter(itm => itm.class === \"received\" || itm.class === \"peer\" || itm.class === \"sold\" || itm.class === \"total_sold\");\n if (is_multistore) {\n return _return.filter(itm => itm.class !== \"sold\");\n } else {\n return _return.filter(itm => itm.class !== \"total_sold\");\n }\n\n }\n return _return;\n }\n\n\n\n const getSummary = () => {\n let _summary = {}\n _summary.soldOH = [];\n _summary.soldOO = [];\n _summary.peerOH = 0;\n _summary.peerOO = 0;\n _summary.peerOHL = 0;\n _summary.peerOOL = 0;\n\n data.rows.forEach(item => {\n\n if (item.class === \"total_sold\") {\n _summary.soldOH.push(item.onhand)\n _summary.soldOO.push(item.onorder)\n }\n\n if (item.class === \"peer\") {\n _summary.peerOH = item.onhand;\n _summary.peerOO = item.onorder;\n _summary.peerOHL = item.onhandlocs;\n _summary.peerOOL = item.onorderlocs;\n }\n })\n\n return _summary;\n }\n\n\n const checkBold = (e, f) => {\n\n if (!e) {\n return \"\";\n }\n if (f.label !== \"Adj\" && f.label !== \"Retn\" && f.label !== \"Peer\") {\n return ({e});\n } else {\n return e;\n }\n\n }\n\n\n const getClass = (_r) => { return (\"rowHover row\" + _r.label) }\n\n const columns = [\n {\n title: , width: \"28px\", className: \"cellBorder\", dataIndex: 'label', key: 'label', render: (e) => {\n return
{e.substr(0, 4)}
\n }\n },\n {\n title: Ttl, width: \"25px\", className: (row) ? \"cellBorder\" : \"cellBorder\", dataIndex: 'ttl', key: 'ttl', render: (e, f) => { return (e) ? e : \"\" }\n },\n { title: {moment().startOf(\"month\").add(-13, \"month\").format(\"MMM\")}, dataIndex: 's1', key: 's1', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-12, \"month\").format(\"MMM\")}, dataIndex: 's2', key: 's2', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-11, \"month\").format(\"MMM\")}, dataIndex: 's3', key: 's3', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-10, \"month\").format(\"MMM\")}, dataIndex: 's4', key: 's4', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-9, \"month\").format(\"MMM\")}, dataIndex: 's5', key: 's5', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-8, \"month\").format(\"MMM\")}, dataIndex: 's6', key: 's6', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-7, \"month\").format(\"MMM\")}, dataIndex: 's7', key: 's7', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-6, \"month\").format(\"MMM\")}, dataIndex: 's8', key: 's8', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-5, \"month\").format(\"MMM\")}, dataIndex: 's9', key: 's9', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-4, \"month\").format(\"MMM\")}, dataIndex: 's10', key: 's10', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-3, \"month\").format(\"MMM\")}, dataIndex: 's11', key: 's11', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-2, \"month\").format(\"MMM\")}, dataIndex: 's12', key: 's12', render: (e, f) => { return checkBold(e, f) } },\n { title: {moment().startOf(\"month\").add(-1, \"month\").format(\"MMM\")}, dataIndex: 's13', key: 's13', render: (e, f) => { return checkBold(e, f) } },\n { className: (row) ? \"cellBorder\" : \"cellBorder\", title: {moment().startOf(\"month\").format(\"MMM\")}, dataIndex: 's14', key: 's14', render: (e, f) => { return checkBold(e, f) } },\n {\n title: Wk, width: \"27px\", dataIndex: 'wk', key: 'wk', render: (e, f) => {\n return (e) ? {e} : \"\";\n }\n },\n\n // {\n // title: OH, className: \"cellBorder\", dataIndex: 'oh', key: 'oh', render: (e, f) => {\n // if (f.label === \"Peer\") {\n // return
{e}{f.ohl}
\n // }\n // return
{e}
\n // }\n // },\n // {\n // title: OO, dataIndex: 'oo', key: 'oo', render: (e, f) => {\n // if (f.label === \"Peer\") {\n // return
{e}{f.ool}
\n // }\n // return
{e}
\n // }\n // },\n ]\n\n\n\n\n\n\n const drawCol = (_lbl, _val, _bg = \"#fafafa\", _color = \"#212121\", _border = true) => {\n if (!_val) {\n _val = <> ;\n _bg = \"#fafafa\";\n _color = \"#212121\"\n }\n return (\n <>\n {(_lbl && {_lbl})}\n
{_val}
\n \n )\n }\n\n\n const drawSummary = () => {\n\n\n\n\n let _summary = {}\n _summary.soldOH = [];\n _summary.soldOO = [];\n _summary.peerOH = 0;\n _summary.peerOO = 0;\n _summary.peerOHL = 0;\n _summary.peerOOL = 0;\n\n let show_peer = false;\n rows.forEach(item => {\n\n if (item.class === \"sold\") {\n _summary.soldOH.push(item.onhand)\n _summary.soldOO.push(item.onorder)\n }\n\n if (item.class === \"peer\") {\n show_peer = true;\n _summary.peerOH = item.onhand;\n _summary.peerOO = item.onorder;\n _summary.peerOHL = item.onhandlocs;\n _summary.peerOOL = item.onorderlocs;\n }\n })\n\n const drawExtras = () => {\n\n\n return Object.keys(extras).filter(item => item !== \"total_onhand\").map((key, index) => {\n\n if (key === \"minimum_onhand\" && extras[key] > 0) {\n\n if (extras.minimum_onhand > extras.available_onhand) {\n return (
{(extras[key] || \"\")}
)\n }\n }\n\n if (key === \"pending_onorder\" && is_forthcoming) {\n return (
{(extras[key] || \"\")}
)\n }\n\n if (key !== \"available_onhand\" && key !== \"total_onorder\" && extras[key] > 0) {\n return (
{(extras[key] || \"\")}
)\n }\n })\n }\n\n const drawExtrasLabel = () => {\n return Object.keys(extras).filter(item => item !== \"total_onhand\").map((key, index) => {\n\n if (key === \"minimum_onhand\" && extras[key] > 0) {\n\n if (extras.minimum_onhand > extras.available_onhand) {\n return (
{abriviateExtra(key)}
)\n }\n }\n\n if (key === \"pending_onorder\" && is_forthcoming) {\n return (
{abriviateExtra(key)}
)\n }\n\n\n if (key !== \"available_onhand\" && key !== \"total_onorder\" && extras[key] > 0) {\n return (
{abriviateExtra(key)}
)\n }\n })\n }\n\n\n return (\n <>\n
props.setAct(!props.act)}>\n
1) ? \"0px\" : \"0px\" }}>\n\n \n \n {drawExtrasLabel()}\n
aOH
\n {_summary.soldOH.map((item, index) => {\n return (\n
\n
{(item) ? item : \"\"}
\n
\n )\n })}\n\n {((window.sitesettings.stores.length > 1) && <>
{_summary.soldOH.reduce((partialSum, a) => partialSum + a, 0) || \"\"}
)}\n\n {(show_peer && <>
{_summary.peerOH} {_summary.peerOHL}
)}\n\n \n \n {drawExtras()}\n
aOO
\n {_summary.soldOO.map((item, index) => {\n return (\n
\n\n
{(item) ? item : \"\"}
\n
\n )\n })}\n\n {((window.sitesettings.stores.length > 1) && <>
{_summary.soldOO.reduce((partialSum, a) => partialSum + a, 0) || \"\"}
)}\n\n {(show_peer && <>
{_summary.peerOO} {_summary.peerOOL}
)}\n \n
\n
\n
\n \n )\n\n }\n\n\n\n\n\n\n\n\n\n if (row) {\n return (\n <>\n {\n return getClass(record);\n }}\n size=\"small\"\n \n onRow={(record, index) => {\n return {\n onClick: event => {\n setShowActivity(!showActivity);\n }\n }\n }}\n className=\"miniHistory columnHeaders\"\n style={{ \"marginRight\": \"1px\", \"borderTop\": \"none\", \"width\": \"0px\" }}\n dataSource={parseData()}\n columns={(row) ? columns.slice(1, 2).concat(columns.slice(10, 17)) : columns}\n pagination={false}\n />\n \n\n );\n }\n\n\n\n\n if (summary) {\n\n return drawSummary()\n }\n\n\n\n\n return (\n <>\n\n \n \n
\n {\n return getClass(record);\n }}\n size=\"small\"\n\n onRow={(record, index) => {\n return {\n onClick: event => {\n setShowActivity(!showActivity);\n }\n }\n }}\n className=\"itemHistory bc\"\n style={{ \"marginRight\": \"1px\", \"borderTop\": \"1px solid\", \"marginTop\" : \"-1px\" }}\n dataSource={addKeys(parseData())}\n columns={columns}\n pagination={false}\n />\n
\n \n \n\n
\n \n
\n\n\n \n
\n\n\n\n\n\n \n\n
\n
\n
\n\n
\n\n\n\n\n \n );\n}","import React, { useEffect, useState } from \"react\";\nimport { Descriptions, Checkbox, Badge, Row, Col, Table, Input, Select, Button, Tag, Dropdown, Menu } from \"antd\";\nimport Order2 from \"./Order2\";\nimport BMSummary from \"./title/BMSummary\";\nimport ItemSales from \"./ItemSales\";\nimport conditional from \"../utils/conditional\";\nimport ItemSales2 from \"./ItemSales2\";\nimport SalesActivity from \"./SalesActivity\";\nimport { apiCall } from \"../utils/Api\";\n\n\nexport default function ItemHistory4(props) {\n\n const { isbn = \"\", divider = true } = props;\n const [results, setResults] = useState((props.data) ? props.data : false)\n const [loading, setLoading] = useState(false);\n\n const getItem = () => {\n\n if (!results) {\n setLoading(true);\n apiCall(\"title/getItem\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setLoading(false)\n }\n })\n }\n }\n\n useEffect(getItem, []);\n\n \n const getStoreDefault = () => {\n\n let _ret = []\n\n window.sitesettings.stores.map(store => {\n _ret.push({class : \"sold\", store_number: store.store_number.toString(), months : Array(14), week : 0, total: 0})\n })\n\n _ret.push({class : \"total_sold\", store_number:\"0\", months : Array(14), week : 0, total: 0})\n return _ret; \n }\n\n const addCondition = (_code) => {\n let _orig = {...results}\n _orig.sales.push({\n bm_data : {},\n code : _code.code,\n code_text : _code.name,\n sales : {rows : getStoreDefault()}\n })\n setResults(_orig);\n }\n\n\n\n const drawConditionSelector = () => {\n\n\n \n let _current_codes = (results.hasOwnProperty(\"sales\")) ? results.sales.map(item => item.code_text) : []\n\n return (\n \n {window.sitesettings.condition_codes.filter(item => !_current_codes.includes(item.name)).map(code => {\n return addCondition(code)} key={code.name}>{code.name}\n })}\n }>\n \n \n )\n }\n\n\n const drawRow = (_row, _index, _suggested, _series) => {\n\n\n\n return (\n
\n\n \n \n \n
\n\n {((results.sales.length > (_index + 1)) && <>\n
\n )}\n
\n )\n }\n\n const drawRows = () => {\n\n let ret = (results.hasOwnProperty(\"sales\")) ? results.sales : []\n\n return ret.map((item, index) => {\n return drawRow(item, index, results.suggested_bm_data, results.series);\n })\n }\n\n if (!results || loading) {\n return (<>)\n }\n return (\n <>\n {drawConditionSelector()}\n {drawRows()}\n \n )\n\n\n\n\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Empty, Spin } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport ItemLayouts from \"../ItemLayouts\";\n\nexport default function PreviousRender(props){\n\n const {isbn} = props;\n const [loading, setLoading] = useState(true);\n const [previous, setPrevious] = useState(\"\")\n \n const getPreviousEdition = () => {\n\n apiCall(\"title/getRelatedEditions\", {isbn : isbn}, (_status, _result) => {\n if(_result.previous_edition.isbns.length>0){\n setPrevious(_result.previous_edition.isbns[0]);\n } else {\n\n }\n setLoading(false);\n })\n }\n\n useEffect(getPreviousEdition, []);\n\n return(<>\n \n {(previous && )}\n {(!previous &&
)}\n
)\n}","import { CloseOutlined } from '@ant-design/icons';\nimport { Button, Col, Divider, Row, Spin } from \"antd\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport { apiCall } from \"../utils/Api\";\nimport SuggestedCartsOnBrowse from \"./catalogues/SuggestedCartsOnBrowse\"\nimport Conditions from \"./Conditions\";\nimport Extras from \"./Extras\";\nimport ItemHistory4 from \"./ItemHistory4\";\nimport TestOrderBox from \"./TestOrderBox\";\nimport PreviousRender from \"./title/PreviousRender\";\nimport Title from \"./title/Title\";\n\n// Layout for components based on view\n// Add marker for where to draw subcomponents\n\n\nexport default function ItemLayouts(props) {\n\n const { \n contextValues = [],\n data = false, \n display, \n index = 0, \n cart_update = false,\n isbn = \"\", \n drawComponent = () => { },\n } = props;\n\n const [highlight, setHighlight] = useState(data.highlight)\n\n const [dataSet, setDataSet] = useState(data);\n\n // if there is no data, fetch it. \n const loadData = () => {\n if (dataSet) {\n return;\n }\n apiCall(\"title/getItem\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n if(Array.isArray(_result)){\n setDataSet(false);\n } else {\n setDataSet(_result);\n }\n }\n })\n }\n useEffect(loadData, [])\n\n if (!dataSet) {\n return ( );\n }\n\n\n function drawBorder(){\n return {\n borderStyle: \"solid\",\n borderColor: \"#ff0099\",\n borderWidth: \"3px\",\n marginTop: \"0px\",\n backgroundColor: \"#ff0099\",\n }\n }\n\n function topRowSequenceNum(){\n let text = \"\"\n if(highlight){\n text = \"#\" + data.sequence_num + \" - Highlighted\";\n return (\n {text} \n )\n }\n text = \"#\" + data.sequence_num;\n return (\n {text}\n )\n }\n\n //checks to see if the Suggested Cart section should be displayed\n function checkForSuggestionsDisplay(){\n if(dataSet.suggested_cart_info){\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line default-case\n switch (display) {\n case \"single\":\n return (
\n
</div>\n <Conditions conditions={dataSet.conditions} data={dataSet} isbn={(dataSet) ? dataSet.isbn : isbn} />\n {/* <Extras data={(dataSet) ? dataSet : {}} isbn={(dataSet) ? dataSet.isbn : isbn} /> */}\n </div>)\n break;\n case \"calendar\":\n return (\n <div key={(dataSet) ? dataSet.isbn : isbn}>\n <Row gutter={18}>\n <Col flex={\"auto\"}>\n <div style={{ \"maxWidth\": \"570px\" }}><Title drawComponent={drawComponent} isbn={(dataSet) ? data.isbn : isbn} data={(dataSet) ? dataSet : {}} display=\"summary\" /></div>\n <Conditions conditions={dataSet.conditions} data={dataSet} isbn={(dataSet) ? dataSet.isbn : isbn} />\n <Extras data={(dataSet) ? dataSet : {}} isbn={(dataSet) ? dataSet.isbn : isbn} />\n </Col>\n <Col style={{\"maxWidth\" : \"608px\"}} flex={\"608px\"}>\n <PreviousRender isbn={(dataSet) ? dataSet.isbn : isbn} />\n </Col>\n </Row>\n </div>\n )\n break;\n case \"cards\":\n return (\n // five at a time...\n <div key={dataSet[0].isbn}>\n <div className=\"cardgrid\">\n {dataSet.map((item, index) => {\n return (<div key={dataSet.isbn}><Title cart_update={cart_update} drawComponent={drawComponent} data={item} display=\"card\" /></div>)\n })}\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>)\n break;\n case \"details2\":\n return (\n <div key={(dataSet) ? dataSet.isbn : isbn}>\n {highlight != null && topRowSequenceNum()}\n <Row gutter={18}>\n <Col flex={\"auto\"}>\n <div style={{ \"maxWidth\": \"570px\" }}>\n <Title\n drawComponent={drawComponent} \n isbn={(dataSet) ? data.isbn : isbn} \n data={(dataSet) ? dataSet : {}} \n display=\"summary\"\n highlight={highlight}\n setHighlight={setHighlight}\n />\n </div>\n </Col>\n <Col style={{\"maxWidth\": \"608px\"}} flex={\"608px\"}>\n <Conditions conditions={dataSet.sales ? dataSet.sales : dataSet.conditions} data={dataSet} isbn={(dataSet) ? dataSet.isbn : isbn} />\n {(checkForSuggestionsDisplay() &&<SuggestedCartsOnBrowse data={(dataSet) ? dataSet : {}} isbn={(dataSet) ? dataSet.isbn : isbn} contextValues={contextValues}/>)}\n <Extras cart_update={cart_update} data={(dataSet) ? dataSet : {}} isbn={(dataSet) ? dataSet.isbn : isbn} />\n </Col>\n </Row>\n </div>\n )\n break;\n case \"details\":\n return (\n <div key={(dataSet) ? dataSet.isbn : isbn}>\n <Row gutter={18}>\n <Col span={12}>\n <Title drawComponent={drawComponent} isbn={(dataSet) ? \"\" : isbn} data={(dataSet) ? dataSet : {}} display=\"summary\" />\n </Col>\n <Col span={12}>\n <ItemHistory4 drawComponent={drawComponent} data={dataSet} isbn={(dataSet) ? data.isbn : isbn} />\n <div className=\"shim\" /><div className=\"shim\" />\n <TestOrderBox data={(dataSet) ? dataSet : {}} isbn={(dataSet) ? dataSet.isbn : isbn} />\n </Col>\n </Row>\n </div>\n )\n break;\n case \"previous\":\n case \"next\":\n return (\n <div key={dataSet.isbn}>\n <Row gutter={10}>\n <Col span={12}>\n <Title drawComponent={drawComponent} data={dataSet} display=\"summary\" />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <ItemHistory4 drawComponent={drawComponent} isbn={dataSet.isbn} />\n </Col>\n <Col span={12}>\n {/* <RelatedTitle drawComponent={drawComponent} display=\"previous\" data={data} /> */}\n </Col>\n </Row>\n <Divider dashed />\n </div>\n )\n break;\n }\n return (<>Item Renderer</>);\n}","import { Table } from \"antd\";\nimport React, { useRef, useCallback, useState } from \"react\";\nimport { DndProvider, useDrag, useDrop } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { MenuOutlined } from '@ant-design/icons';\nexport default function DragTable(props) {\n\n\n const {size = \"small\", rowKey=\"\", className = \"\", style = {}, scroll = {}, pagination = false, columns = [], data = [], setData = () => {}, callback = () => {} } = props; \n \n const type = 'DraggableBodyRow';\n\n const DraggableBodyRow = ({ index, moveRow, className, style, ...restProps }) => {\n const ref = useRef(null);\n const [{ isOver, dropClassName }, drop] = useDrop({\n accept: type,\n collect: (monitor) => {\n const { index: dragIndex } = monitor.getItem() || {};\n if (dragIndex === index) {\n return {};\n }\n return {\n isOver: monitor.isOver(),\n dropClassName: dragIndex < index ? ' drop-over-downward' : ' drop-over-upward',\n };\n },\n drop: (item) => {\n moveRow(item.index, index);\n },\n });\n const [, drag] = useDrag({\n type,\n item: {\n index,\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n drop(drag(ref));\n return (\n <tr\n ref={ref}\n className={`${className}${isOver ? dropClassName : ''}`}\n style={{\n ...style,\n }}\n {...restProps}\n />\n );\n };\n\n\n const updateData = (_d, _h) => {\n\n let _arr = [...data];\n let _c; //clone\n if (_d < _h) {\n _c = _arr[_d];\n _arr.splice((_h + 1), 0, _c);\n _arr.splice(_d, 1);\n }\n\n if (_d > _h) {\n _c = _arr[_d];\n _arr.splice(_d, 1);\n _arr.splice((_h), 0, _c);\n }\n\n setData(_arr);\n\n return _arr; \n\n\n }\n\n const moveRow = useCallback(\n (dragIndex, hoverIndex) => {\n const dragRow = data[dragIndex];\n\n let _arr = updateData(dragIndex, hoverIndex);\n\n if(JSON.stringify(_arr) !== JSON.stringify(data)){ \n callback(_arr); \n }\n \n // setData(\n // update(data, {\n // $splice: [\n // [dragIndex, 1],\n // [hoverIndex, 0, dragRow],\n // ],\n // }),\n // );\n },\n [data],\n );\n\n const components = {\n body: {\n row: DraggableBodyRow,\n },\n };\n\n return (\n <>\n\n\n <DndProvider backend={HTML5Backend}>\n <Table\n size={size}\n style={style}\n rowKey={rowKey}\n pagination={pagination}\n className={className}\n scroll={scroll}\n columns={columns}\n dataSource={data}\n components={components}\n onRow={(_, index) => {\n const attr = {\n index,\n moveRow,\n };\n return attr;\n }}\n />\n </DndProvider>\n\n </>\n );\n}","import React, { useState } from \"react\";\nimport { Upload, Table, Spin, Input, Tabs, Form, Button } from 'antd';\nimport { UploadOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport { MenuOutlined } from '@ant-design/icons';\nimport DragTable from \"../DragTable\";\n\nexport default function ListUpload(props) {\n\n const { candelete = false, drag = false, resetSort = () => {}, setCanSave = () => {}, canSave=true, list_id, isbns, updateList = () => { } } = props;\n const [position, setPosition] = useState(\"list\");\n const [uploading, setUploading] = useState(false);\n const [file, setFile] = useState({});\n const [processed, setProcessed] = useState(isbns);\n \n\n \n\n const limit = 100;\n\n const [form] = Form.useForm(); \n\n const uploadFile = (_file, show_list = true) => {\n setUploading(true);\n setFile(_file);\n apiCall(\"titlelist/importFile\", { file: _file.file, list_id: list_id }, (_status, _result) => {\n if (_status) {\n setProcessed(_result.result.titles);\n form.setFieldsValue({txt : drawText(_result.result.titles)})\n if (show_list) {\n setPosition(\"list\");\n }\n updateList(_result.result.titles.map(item => { return item.isbn} ));\n } else {\n setPosition(\"error\");\n }\n setUploading(false);\n setCanSave(true);\n\n }, \"customer\");\n }\n\n const placeholder = \"Type or paste ISBNs, EANs, or UPCs here. By default the contents will be listed in the order they are inputed, unless otherwise specified in the 'sort by' section below. \\n\\nexample: \\n9780062351357 \\n9780062304087 \\n9780062063625\";\n\n\n const removeItem = (f) => {\n\n let m = [...processed];\n let _index = m.findIndex(item => item.isbn === f.isbn);\n if(_index > -1){\n // found\n m.splice(_index, 1);\n setProcessed(m);\n updateList(m.map(item => { return item.isbn} ));\n\n }\n\n }\n\n const columns = [\n {\n title: <small></small>,\n dataIndex: 'eisbn',\n key: 'eisbn',\n width: 50,\n render: (e) => {\n return <div style={{\"height\" : \"34px\"}}><img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"34px\", \"maxWidth\": \"30px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + e} /></div>\n }\n },\n {\n title: <small>ISBN</small>,\n dataIndex: 'isbn',\n key: 'isbn',\n width: 150\n },\n {\n title: <small>Title</small>,\n dataIndex: 'title',\n key: 'title',\n },\n {\n title: <small></small>,\n dataIndex: 'success',\n key: 'success',\n render: (e) => {\n return (e === false) ? <span style={{\"color\" : \"#f00\"}}>* Title not found</span> : \"\"\n }\n },\n ];\n\n if(drag && (processed.length <=limit)){\n columns.unshift(\n {\n title: <small></small>,\n dataIndex: 'success',\n width : \"30px\",\n key: 'success',\n render: (e) => {\n return <div> <MenuOutlined style={{\"cursor\" : \"move\"}} /></div>\n }\n }\n )\n }\n\n if(candelete){\n columns.push(\n {\n title: <small></small>,\n dataIndex: 'success',\n width : \"80px\",\n key: 'success',\n render: (e, f) => {\n return <div><Button onClick={() => removeItem(f)} danger size=\"small\"><small>Remove</small></Button></div>\n }\n }\n )\n }\n\n\n\n const drawText = (_arr) => {\n let _txt = \"\";\n _arr.map((item, index) => {\n return { key: index, title: item.title, eisbn: item.eisbn, isbn: item.isbn, status: item.success }\n }).forEach(itm => {\n let title = (itm.status !==false) ? itm.title : \"* Title not found\";\n _txt += itm.isbn + \" \" + title + \"\\n\";\n });\n return _txt;\n }\n\n const drawTable = () => {\n\n \n\n\n if(drag && (processed.length <=limit)){\n\n return <DragTable callback={(arr) => {\n \n resetSort(); \n updateList(arr.map(item => { return item.isbn} ));\n }} rowKey={\"isbn\"} className=\"bc\" scroll={{ y: 255 }} size=\"small\" style={{ \"border\": \"1px solid\" }} data={processed} setData={setProcessed} columns={columns} />\n \n }\n\n return (\n <Table rowKey={\"isbn\"} pagination={(processed.length <=limit) ? false : {pageSize : limit, showSizeChanger : false}} className=\"bc\" scroll={{ y: 255 }} style={{ \"border\": \"1px solid\" }} columns={columns} dataSource={processed} size=\"small\"></Table>\n )\n }\n\n const generateFile = (_text) => {\n var filename = 'pasted.txt';\n let _file = new File([new Blob([_text])], filename)\n let f = {}\n f.file = _file;\n uploadFile(f, false);\n }\n\n const drawUpload = () => {\n return (\n <>\n <div style={{ \"height\": \"296px\" }}>\n <Upload.Dragger accept=\".txt, .pdf, .xls, .xlsx, .html, .csv\" showUploadList={false} customRequest={(e) => uploadFile(e)} style={{ \"padding\": \"0px 20px\", \"height\": \"300px\" }}>\n <div >\n {(uploading) ? <Spin style={{ height: \"35px\" }} /> : <UploadOutlined style={{ \"fontSize\": \"30px\", height: \"35px\" }} />}\n </div>\n <p className=\"ant-upload-text\">Click or drag to upload</p>\n <p className=\"ant-upload-hint\">\n Upload an Excel file (.xls or .xlsx) or tab delimited (.txt) with the header \"isbn\"\n </p>\n </Upload.Dragger>\n </div>\n </>\n )\n }\n\n const drawProcess = () => {\n return (\n <>\n {drawTable()}\n </>\n )\n }\n\n return (\n <>\n \n <Tabs className=\"itemTabs\" onChange={(e) => setPosition(e)} size=\"small\" activeKey={position} type=\"card\" >\n <Tabs.TabPane tab=\"List\" key=\"list\">\n {drawProcess()}\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Text\" key=\"text\">\n <Spin spinning={(uploading)}>\n <Form form={form}>\n <Form.Item name=\"txt\" noStyle>\n <Input.TextArea style={{\"fontFamily\" : \"ApercuMono\"}} onFocus={() => setCanSave(false)} onBlur={(e) => generateFile(e.target.value)} placeholder={placeholder} defaultValue={drawText(processed)} rows={13} />\n </Form.Item>\n </Form>\n \n <div className=\"shim\" />\n <div style={{\"float\" : \"right\"}}><Button disabled={(canSave)} type=\"primary\" size=\"small\"><small>Update</small></Button></div>\n <br clear=\"all\" />\n </Spin>\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Import\" key=\"import\">\n {drawUpload()}\n </Tabs.TabPane>\n </Tabs>\n </>\n )\n\n}","import { Select } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function FilterPresetSelect(props) {\n\n const { width = 300, onChange = () => {}, value = \"\", setPresets = () => {}} = props; \n const [results, setResults] = useState({store_specific : []});\n const [loading, setLoading] = useState(true);\n\n const fetchLists = () => {\n apiCall(\"toolbox/get\", { header : \"status\"}, (_status, _result) => {\n if (_status) {\n setPresets(_result);\n setResults(_result);\n }\n setLoading(false);\n })\n }\n useEffect(fetchLists, []);\n\n const getOptions = () => {\n return results.store_specific.map(item => {\n let _itm = item;\n _itm.label = item.name;\n _itm.value = item.id;\n return _itm; \n })\n }\n\n if(loading){\n return(<></>)\n }\n\n return (\n <>\n <Select loading={loading} showSearch style={{\"width\" : width + \"px\"}} defaultValue={(value) ? value : null} placeholder=\"Select filter preset...\" onChange={(e) => onChange(e)} options={getOptions()} />\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Typography, Divider, Form, Button, Input, Space, Select, Checkbox, message, AutoComplete, Spin, Result, Alert, Popconfirm, Tabs } from \"antd\";\nimport ListUpload from \"./ListUpload\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport FilterPresetSelect from \"./FilterPresetSelect\";\n\nexport default function ListEdit(props) {\n\n const { callback = () => { }, create = false, data = {}, close = () => { }, results = {}, setResults = () => { } } = props;\n\n const [saving, setSaving] = useState(false);\n const [cats, setCats] = useState({ categories: [], subcategories: [] })\n const [canSave, setCanSave] = useState(true);\n const [form] = Form.useForm()\n\n const {\n list_id = \"\",\n is_dynamic = false,\n site_content = false,\n category = \"Uncategorized\",\n subcategory = \"\",\n sort_by = \"\",\n name = \"\",\n description = \"\",\n onhand_first = false,\n hide_non_oh_oo = false,\n sort_by_reversed = false,\n filter_preset_id = \"\",\n } = data;\n\n const [sort, setSort] = useState(sort_by);\n const [isPreset, setIsPreset] = useState((filter_preset_id));\n const [dynamic, setDynamic] = useState(is_dynamic);\n const [isbns, setIsbns] = useState([]);\n const [loading, setLoading] = useState(!create);\n\n const getISBNs = () => {\n if (create) { return; }\n apiCall(\"titlelist/get\", { list_id: list_id }, (_status, _result) => {\n if (_status) {\n setIsbns(_result.isbns);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n useEffect(getISBNs, []);\n\n const getCats = () => {\n apiCall(\"titlelist/getCurrentCategories\", {}, (_status, _result) => {\n if (_status) {\n setCats(_result);\n }\n })\n }\n useEffect(getCats, [])\n\n const convertList = () => {\n let obj = { ...data }\n obj.is_dynamic = false;\n obj.isbns_json = JSON.stringify(isbns.map(item => { return item.isbn }));\n apiCall(\"titlelist/edit\", obj, (_status, _result) => {\n if (_status) {\n setDynamic(_result.is_dynamic);\n message.success(\"List converted successfully.\")\n } else {\n message.error(_result.error);\n }\n })\n }\n\n const onFinish = (_f) => {\n\n // Create and save preset\n if (isPreset) {\n apiCall((create) ? \"titlelist/createDynamic\" : \"titlelist/editDynamic\", _f, (_status, _result) => {\n if (_status) {\n if (create) {\n callback();\n message.success(\"List created successfully.\");\n } else {\n let newArr = { ...results };\n let update = results.rows.find(item => item.list_id === _result.list_id);\n Object.keys(update).map(key => {\n update[key] = _result[key];\n })\n newArr.rows[results.rows.findIndex(item => item.list_id === _result.list_id)] = update;\n setResults({ ...results, \"rows\": newArr.rows })\n message.success(\"List saved successfully.\");\n }\n close();\n } else {\n message.error(_result.error)\n }\n setSaving(false);\n })\n\n return;\n }\n\n\n // Create and save list\n _f.sort_by = sort;\n //_f.filter_preset_id = 95;\n setSaving(true)\n if (!_f.hasOwnProperty(\"description\")) {\n _f.description = description;\n }\n apiCall((create) ? \"titlelist/create\" : \"titlelist/edit\", _f, (_status, _result) => {\n if (_status) {\n if (create) {\n callback();\n message.success(\"List created successfully.\");\n } else {\n let newArr = { ...results };\n let update = results.rows.find(item => item.list_id === _result.list_id);\n Object.keys(update).map(key => {\n update[key] = _result[key];\n })\n newArr.rows[results.rows.findIndex(item => item.list_id === _result.list_id)] = update;\n setResults({ ...results, \"rows\": newArr.rows })\n message.success(\"List saved successfully.\");\n }\n close();\n } else {\n message.error(_result.error)\n }\n setSaving(false);\n })\n }\n\n const updateList = (_list) => {\n form.setFieldsValue({ \"isbns_json\": JSON.stringify(_list) })\n }\n\n const drawDynamicWarning = () => {\n return (\n <Result\n icon={<></>}\n title=\"\"\n type=\"warning\"\n extra={\n <Alert style={{ \"maxWidth\": \"300px\", \"margin\": \"0 auto\" }} description={\n <>\n <div>\n <strong>List is dynamic</strong>\n <div>This list is generated from search filters<br /> You can convert to a static, editable list by clicking below</div>\n <br />\n <div>\n <Popconfirm onConfirm={() => convertList()} title={<>Are you sure? <br />This action is irreversible</>} ><Button type=\"primary\" size=\"small\"><small>Convert to static list</small></Button></Popconfirm>\n </div>\n </div>\n </>} />\n }\n />\n )\n }\n\n return (\n <>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>{(create) ? \"Create new\" : \"Edit\"} List</Typography.Title>\n <Divider />\n <Spin spinning={loading}>\n <Form form={form} onFinish={(e) => onFinish(e)} layout=\"vertical\">\n\n <Tabs className=\"itemTabs\" activeKey={(isPreset) ? \"preset\" : \"static\"} onChange={(e) => setIsPreset(e !== \"static\")} type=\"card\">\n <Tabs.TabPane tab=\"Static List\" key=\"static\">\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"List from Filter Preset\" key=\"preset\">\n </Tabs.TabPane>\n </Tabs>\n\n <Form.Item hidden initialValue={list_id} name=\"list_id\" label=\"List name\">\n <Input />\n </Form.Item>\n\n <Space size={10} align=\"start\">\n <Form.Item initialValue={name} name=\"name\" label=\"List name\">\n <Input placeholder=\"List name\" style={{ \"width\": \"300px\" }} />\n </Form.Item>\n\n {(!isPreset &&\n <Form.Item hidden noStyle value={sort_by} name=\"sort_by\">\n <Input />\n </Form.Item>\n )}\n\n {(isPreset &&\n <Form.Item initialValue={filter_preset_id} rules={[{ required: true, message: \"Preset Required\" }]} name={\"filter_preset_id\"} label=\"Filter Preset\">\n <FilterPresetSelect value={filter_preset_id} />\n </Form.Item>\n )}\n\n {(!isPreset &&\n <Space size={20}>\n <Form.Item label=\"Sort by\">\n <Select value={sort} onChange={(e) => setSort(e)} style={{ \"width\": \"200px\" }}>\n <Select.Option value={\"\"} >None</Select.Option>\n <Select.Option value={\"rank\"} >Rank</Select.Option>\n <Select.Option value={\"alphabetical_title\"} >Alphabetically</Select.Option>\n <Select.Option value={\"alphabetical_author\"} >Author</Select.Option>\n <Select.Option value={\"pubdate\"} >Pubdate</Select.Option>\n <Select.Option value={\"bisac_subject_and_title\"} >Subject</Select.Option>\n </Select>\n </Form.Item>\n <div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Form.Item noStyle valuePropName=\"checked\" initialValue={sort_by_reversed} name=\"sort_by_reversed\" label=\"Sort by Reversed\">\n <Checkbox>Reverse <br />Sort by</Checkbox>\n </Form.Item>\n </div>\n </Space>\n )}\n\n </Space>\n <Space size={20} align=\"start\">\n <Form.Item rules={[{ required: true, message: \"Required. Alphanumeric only\", pattern: new RegExp(/^[a-zA-Z 0-9]+$/i) }]} initialValue={category} name=\"category\" label={<>Category  <small>(25 char max)</small></>}>\n <AutoComplete\n style={{ \"width\": \"200px\" }}\n maxLength={25}\n options={cats.categories.map(item => {\n return { value: item }\n })}\n />\n </Form.Item>\n <Form.Item rules={[{ required: false, message: \"Alphanumeric only\", pattern: new RegExp(/^[a-zA-Z 0-9]+$/i) }]} initialValue={subcategory} name=\"subcategory\" label={<>Subcategory  <small>(25 char max)</small></>}>\n <AutoComplete\n style={{ \"width\": \"200px\" }}\n maxLength={25}\n options={cats.subcategories.map(item => {\n return { value: item }\n })}\n />\n </Form.Item>\n\n {(!isPreset &&\n <div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Form.Item noStyle valuePropName=\"checked\" initialValue={hide_non_oh_oo} name=\"hide_non_oh_oo\" label=\"Hide non O/H O/O titles\">\n <Checkbox>Hide non O/H O/O titles</Checkbox>\n </Form.Item>\n <div className=\"shim\" />\n <Form.Item noStyle initialValue={onhand_first} valuePropName=\"checked\" name=\"onhand_first\" label=\"On hand first\">\n <Checkbox>On hand first</Checkbox>\n </Form.Item>\n </div>\n )}\n\n </Space>\n <conditional.true value={(!site_content)}>\n <Form.Item initialValue={description} label=\"Description\" name={\"description\"}>\n <Input.TextArea placeholder=\"Description...\" onChange={(e) => console.log(e)} rows={3} showCount maxLength={2000}></Input.TextArea>\n </Form.Item>\n </conditional.true>\n {((!loading && !isPreset) &&\n <Spin indicator={<>{drawDynamicWarning()}</>} spinning={dynamic}>\n <ListUpload candelete drag canSave={canSave} resetSort={() => {\n setSort(\"\");\n }} setCanSave={setCanSave} list_id={list_id} updateList={updateList} isbns={isbns} />\n <Form.Item hidden initialValue={JSON.stringify(isbns.map(item => { return item.isbn }))} noStyle name={\"isbns_json\"}>\n <Input.TextArea rows={3} showCount maxLength={2000}></Input.TextArea>\n </Form.Item>\n </Spin>\n )}\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Cancel</Button>\n <Button loading={saving} disabled={(!canSave)} htmlType=\"submit\" type=\"primary\">Save</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </Spin>\n </div>\n </>\n );\n}","import { Checkbox, Space, Tooltip } from \"antd\";\nimport React from \"react\";\nimport { apiCall } from \"../../utils/Api\";\nimport { useSession } from \"../../utils/Session\";\nimport { useEffect } from \"react/cjs/react.production.min\";\n\n// Display a list of their quick picks - if a list_id is passed, only show the checkbox. \nexport default function ListQuickPick(props) {\n\n const { list_id = false, my_lists = [], isbn = \"\", list = {}, updateMyListsInParent = () => {}} = props;\n const [session, setSession] = useSession();\n\n // https://tbraunapi.bookmanager.com/store/titlelist/toggleQuickPick?session_id=vW8vhiPdsd2a1sh4Mnm0e6FumFnC&store_id=101069&list_id=415328&is_picked=true\n const toggleQuickPick = (_checked) => {\n apiCall(\"titlelist/toggleQuickPick\", { list_id: list_id, is_picked: _checked }, (_status, _result) => {\n if (_status) {\n setSession(_result);\n }\n })\n }\n\n //this function uses the callback to keep my_lists in sync with ListCount.js\n const updateMyLists = (_record) => {\n let _my_lists = [...my_lists];\n if(!_my_lists.includes(_record)){\n _my_lists.push(_record);\n }else{\n _my_lists.splice(_my_lists.indexOf(_record), 1);\n }\n updateMyListsInParent(_my_lists);\n }\n\n const toggleItem = (_add, _isbn, _list_id) => { \n if (_add) {\n apiCall(\"titlelist/addItemToList\", { isbn: _isbn, list_id: _list_id }, (_status, _result) => {\n updateMyLists(_result.actual_id);\n })\n } else {\n apiCall(\"titlelist/removeItemFromList\", { isbn: _isbn, list_id: _list_id }, (_status, _result) => { \n updateMyLists(_result.actual_id);\n })\n }\n }\n\n //this is called by ListCount when the QP button is clicked. \n //checks to see if the list being selected already exists within the session variable\n if (list_id) {\n let found = session.quick_pick_lists.some(item => item.list_id === list_id); \n return (\n <>\n <Checkbox checked={(found)} onChange={(e) => toggleQuickPick(e.target.checked)} disabled={(list.is_dynamic)} />\n </>\n )\n }\n\n //this is called by Title.js when the checkbox is clicked, calling toggleItem\n //to set it into a list or remove it from one\n return (\n <>\n <Space size={0} direction=\"vertical\">\n {session.quick_pick_lists.map((item, index) => {\n return (<div key={index}><Checkbox onChange={(e) => toggleItem(e.target.checked, isbn, item.list_id)} checked={(my_lists.includes(item.actual_id))} className=\"mini-checkbox\" />  <small>{item.name}</small></div>);\n })}\n </Space>\n <br />\n </>\n )\n\n}","import { Select, Space, Button, Modal, message } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { apiCall } from \"../utils/Api\";\n\nexport default function BroadcastMessage(props) {\n\n const { trigger = false, title = \"Share current page\", path = \"\" } = props;\n\n const toURI = (_string) => {\n let no_whitespace = _string.replace(/\\s+/g, '-');\n let sanitized = no_whitespace.replace(/[^A-Za-z0-9-]+/g, '', no_whitespace);\n return sanitized;\n }\n\n const location = useLocation();\n const [names, setNames] = useState([]);\n const [selected, setSelected] = useState(\"\")\n const getPubsubNames = () => {\n apiCall(\"session/getPubsubNames\", {}, (_status, _result) => {\n if (_status) {\n setNames(_result.names);\n }\n })\n }\n\n useEffect(getPubsubNames, [trigger]);\n\n const shareRoute = () => {\n\n let obj = {\n to_channel: toURI(selected),\n \n }\n\n if(path){\n obj.route = path\n } else {\n obj.route = location.pathname; \n }\n apiCall(\"publish/shareRoute\", obj, (_status, _result) => {\n if (_status) {\n Modal.success({ title: \"Page Sent!\" });\n } else {\n message.error(_result.error);\n }\n })\n\n }\n\n return (\n <>\n <label>{title}</label>\n <br />\n <Space>\n <Select onChange={(e) => setSelected(e)} placeholder=\"Select user...\" style={{ width: 200 }}>\n {names.map((item, index) => {\n return <Select.Option key={index} value={item}>{item}</Select.Option>\n })}\n </Select>\n <Button onClick={() => shareRoute()} disabled={(!selected)} type=\"primary\"><small>Send</small></Button>\n </Space>\n </>\n );\n}","import React from 'react';\nimport Icon from '@ant-design/icons';\n\nconst XSVG = () => (<svg fill=\"currentColor\" width=\"24px\" height=\"24px\" viewBox=\"0 0 1200 1227\"><path d=\"M714.163,519.284L1160.89,0h-105.86L667.137,450.887L357.328,0H0l468.492,681.821L0,1226.37h105.866l409.625-476.152 l327.181,476.152H1200L714.137,519.284H714.163z M569.165,687.828l-47.468-67.894L144.011,79.694h162.604l304.797,435.991 l47.468,67.894l396.2,566.721H892.476L569.165,687.854V687.828z\"/></svg>);\nexport const XIcon = props => <Icon component={XSVG} {...props} />","import React, { useState } from \"react\";\nimport { Button, Input, Modal, Space, Typography, Tag, message, Divider } from \"antd\";\nimport { ShareAltOutlined, TwitterSquareFilled, FacebookFilled, TwitterOutlined, FacebookOutlined } from '@ant-design/icons'\nimport BroadcastMessage from \"../BroadcastMessage\";\nimport { XIcon } from \"../icons/XIcon\";\nexport default function Share(props) {\n\n const { store_path = false, customer_path = false } = props;\n\n\n const customer_url = window.sitesettings.url + customer_path\n const store_url = \"https://share.bookmanager.com/biz/\" + store_path; \n\n const CopyButton = (props) => {\n const { path = \"\" } = props\n const [copied, setCopied] = useState(false);\n\n const copyToClipboard = (_str) => {\n if (!navigator.clipboard) {\n message.error(\"Can't copy\");\n return;\n }\n navigator.clipboard.writeText(path);\n setCopied(true);\n setTimeout(() => {\n setCopied(false)\n }, 1000);\n }\n\n return (<Button onClick={(e) => copyToClipboard(e)} type={(copied ? \"default\" : \"primary\")}>{(copied) ? \"Copied\" : \"Copy\"}</Button>);\n\n }\n\n const [visible, setVisible] = useState(false);\n const drawModal = () => {\n return (\n <>\n <Modal destroyOnClose footer={null} onCancel={() => setVisible(false)} visible={visible}>\n <Typography.Title level={5}>Share</Typography.Title>\n\n {(customer_path && <>\n <Typography.Paragraph>To share this with <strong>customers</strong>, copy this link (e.g. Ctrl-C) and then paste it into an email.</Typography.Paragraph>\n <Space>\n <Input style={{ \"width\": \"400px\" }} defaultValue={customer_url} />\n <CopyButton path={customer_url} />\n </Space>\n </>)}\n\n {((customer_path && store_path) && <><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /></>)}\n\n {(store_path && <>\n <Typography.Paragraph>To share this with other <strong>bookmanager stores</strong>, copy this link (e.g. Ctrl-C) and then paste it into an email.</Typography.Paragraph>\n <Space>\n <Input style={{ \"width\": \"400px\" }} defaultValue={store_url} />\n <CopyButton path={store_url} />\n </Space>\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <BroadcastMessage title=\"Send this title to staff member screen\" path={store_url} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </>)}\n\n \n {(customer_path && <>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Typography.Paragraph>Share on social media</Typography.Paragraph>\n <Space size={5}>\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={\"https://twitter.com/share?url=\" + customer_url}><Button type=\"text\" icon={<XIcon style={{ \"fontSize\": \"32px\", \"color\": \"#000\" }} />} /></a>\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={\"https://www.facebook.com/sharer/sharer.php?u=\" + customer_url}><Button type=\"text\" icon={<FacebookFilled style={{ \"fontSize\": \"32px\", \"color\": \"#4267B2\" }} />} /></a>\n </Space>\n </>)}\n\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => setVisible(false)}>Cancel</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Modal>\n </>\n )\n }\n\n\n return (\n <>\n {drawModal()}\n <div onClick={() => setVisible(true)}>{props.children}</div>\n </>\n )\n}","\nimport React, { useState, useEffect } from \"react\";\nimport { Button, Divider, Typography, Table, Modal, message, Checkbox, Input, Space } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport { bmDate } from \"../../utils/Utils\";\nimport Overlay from \"../Overlay\";\nimport ListEdit from \"./ListEdit\";\nimport ListQuickPick from \"./ListQuickPick\";\nimport { useSession } from \"../../utils/Session\";\nimport { ShareAltOutlined } from '@ant-design/icons'\nimport Share from \"../title/Share\";\nexport default function ListCount(props) {\n\n const { isbn = \"\", my_lists = [], title=\"\", updateMyListsInParent = () => {}} = props;\n const [res, setRes] = useState({rows : []})\n const [loading, setLoading] = useState(false);\n const [visible, setVisible] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [session, setSession] = useSession();\n\n\n const linkOut = (_id) => {\n window.open(\"/purchasing/browse/filter/x/\" + _id + \"/v/sequence\", \"_blank\");\n }\n\n const updateMyLists = (_record) => {\n let _my_lists = [...my_lists];\n if(!_my_lists.includes(_record)){\n _my_lists.push(_record);\n }else{\n _my_lists.splice(_my_lists.indexOf(_record), 1);\n }\n updateMyListsInParent(_my_lists);\n }\n\n const updateRow = (_record) => {\n let _res = {...res};\n let _find = _res.rows.findIndex(item => item.list_id === _record.list_id);\n if(_find > -1){\n _res.rows[_find].in_list = _record.in_list; \n }\n setRes(_res);\n }\n\n const toggle = (_list_id, _isbn, _checked = true) => {\n if(_checked){\n apiCall(\"titlelist/addItemToList\", {isbn : _isbn, list_id : _list_id}, (_status, _result) => {\n if(_status){\n updateMyLists(_result.actual_id);\n updateRow(_result);\n } else {\n message.error(_result.error);\n }\n })\n } else {\n apiCall(\"titlelist/removeItemFromList\", {isbn : _isbn, list_id : _list_id}, (_status, _result) => {\n if(_status){\n updateMyLists(_result.actual_id);\n updateRow(_result);\n } else {\n message.error(_result.error);\n }\n })\n }\n }\n\n const openModal = () => {\n setVisible(true);\n fetchMyLists();\n }\n\n const fetchMyLists = (_search) => {\n setLoading(true);\n let obj = {\n isbn : isbn,\n g: \"-Pick List\" // Exclude picklists....\n }\n if(_search){\n obj.t = _search; \n }\n apiCall(\"titlelist/getMyLists\", obj, (_status, _result) => {\n if (_status) {\n setRes(_result);\n } else {\n message.error(_result.error);\n }\n setLoading(false);\n })\n }\n\n const close = () => {\n setVisible(false);\n fetchMyLists();\n }\n\n const searchRows = () =>{\n return res.rows.filter(item => item.name.includes(search))\n }\n\n const updatedCount = () => {\n return my_lists.length;\n }\n\n const hasQP = (_id) =>{\n return (session.quick_pick_lists.some(item => item.actual_id === _id)) ? 1 : 0; \n }\n\n const drawMyLists = () => {\n return (\n <Modal destroyOnClose={true} onCancel={() => close(false)} footer={null} visible={visible}>\n <div style={{ \"padding\": \"0px\" }} >\n <Typography.Title level={4}>\n <div>{title}</div>\n </Typography.Title>\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>My lists ({(updatedCount())})</div>\n <Divider dashed style={{ \"marginTop\": \"10px\", \"marginBottom\": \"5px\" }} />\n </Typography.Title>\n <Space style={{\"float\" : \"right\"}}>\n <Button type=\"primary\" size=\"small\"><small><Overlay width={700} component={<ListEdit create={true} callback={fetchMyLists} />}>Create</Overlay></small></Button>\n </Space>\n <Input.Search onBlur={(e) => {\n if(e.target.value === \"\"){\n fetchMyLists(\"\");\n }\n }} onSearch={(_search) => fetchMyLists(_search)} onChange={(e) => setSearch(e.target.value)} placeholder=\"Search lists...\" style={{\"width\" : \"300px\"}} size=\"small\" enterButton />\n <div className=\"shim\" />\n <Table\n className=\"bdr\"\n loading={loading}\n rowKey=\"list_id\"\n size=\"small\"\n pagination={false}\n columns={columns}\n scroll={{ y: 258 }}\n dataSource={res.rows.sort((a, b) => hasQP(b.actual_id) - hasQP(a.actual_id))}\n />\n <br />\n <div style={{ \"float\": \"right\" }}>\n <Button onClick={() => close(false)}>Close</Button>\n </div>\n <div><em>Showing 25 most recently updated lists. Use Search to find more.</em></div>\n <br clear=\"all\" />\n </div>\n </Modal>\n )\n }\n\n\n const columns = [\n { title: <small>In List</small>, width: 70, dataIndex: 'vendor', key: 'vendor', render : (e, f) => {\n return (<Checkbox onClick={(e) => toggle(f.list_id, isbn, e.target.checked)} checked={(f.in_list) ? \"checked\" : \"\"} disabled={f.is_dynamic}/>)\n }},\n {\n title: <small>Name</small>, dataIndex: 'name', key: 'name', render: (e, f) => {\n return (e) ? <a onClick={() => linkOut(f.list_id)} >{e}</a> : \"\";\n }\n },\n { title: <small>Titles</small>, width: 60, dataIndex: 'isbns_count', key: 'isbns_count' },\n {\n title: <small>Updated</small>, width: 70, dataIndex: 'date_updated', key: 'date_updated', render: (e) => {\n return (e) ? <nobr>{bmDate(e * 1000)}</nobr> : \"\"\n }\n },\n { title: <small>QP</small>, width: 40, dataIndex: 'quickpick', key: 'quickpick', render: (e, f) => {\n return <ListQuickPick list={f} list_id={f.list_id}/>\n }},\n\n { title: <small></small>, width: 50, dataIndex: 'share', key: 'share', render: (e, f) => {\n return <Share customer_path={\"lists/\" + f.list_id} store_path={\"biz/purchasing/browse/filter/x/\" + f.list_id + \"/v/sequence\"} ><Button size=\"small\"><ShareAltOutlined /></Button></Share>\n }},\n ]\n\n\n\n\n return (\n <>\n {drawMyLists()}\n <Button onClick={() => openModal()} size=\"small\" className=\"mini-btn\" ><small>My lists ({(updatedCount())}) </small></Button>\n </>\n )\n}","import React from \"react\";\n\nexport default function SliderItem(props) {\n\n const { action = () => { } } = props;\n\n const key = Math.random(1000).toString();\n\n /*\n When a visitor presses they with either release in a 5px radius (click) or drag and move futher (no click)\n */\n let x = 0;\n let buffer = 5;\n const onDown = (e) => { x = e.pageX; }\n const onUp = (e, _item) => {\n if (!(Math.abs(e.pageX - x) > buffer)) {\n // not dragging\n action();\n }\n }\n\n /*\n Same logic for click v drag - except for touch events\n */\n let link = true;\n const onTDown = () => {\n link = true;\n }\n const onTUp = (_item) => {\n if (link) {\n // not dragging\n action();\n }\n }\n const onTMove = () => {\n link = false;\n }\n\n\n return (\n <>\n <div key={key} className=\"slide\" >\n <div onTouchMove={(e) => onTMove(e)} onTouchStart={(e) => onTDown(e)} onTouchEnd={(e) => onTUp(e)} onMouseDown={(e) => onDown(e)} onMouseUp={(e) => onUp(e, e)} style={{ \"display\": \"block\" }}>\n {props.children}\n </div>\n </div>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Select, Checkbox, Space, Button, Form, Typography, Divider } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function ListCreatePdf(props) {\n\n const { \n is_catalogue = false,\n count = 0, \n list_id = \"lWdPKvwwjI8\", \n close = () => { } \n } = props;\n\n const layout = [\n {\n label: \"15 per page (3 columns)\",\n key: \"threebyfive\",\n value: \"15\"\n },\n\n {\n label: \"8 per page (2 columns)\",\n key: \"twobyfour\",\n value: \"8\"\n },\n\n {\n label: \"5 per page (1 column)\",\n key: \"onebyfive\",\n value: \"5\"\n },\n\n {\n label: \"2 per page (1 column)\",\n key: \"onebytwo\",\n value: \"2\"\n },\n\n {\n label: \"1 per page (1 column)\",\n key: \"onebyone\",\n value: \"15\"\n }\n ];\n\n const [options, setOptions] = useState(\n [\n // [!NEW]\n {\n label: \"Use Sans Serif?\",\n value: \"is_sans_serif\",\n checked: true,\n },\n {\n label: \"Print Quality Images?\",\n value: \"is_print_quality\",\n checked: false,\n },\n {\n label: \"Include Onhand and Onorder\",\n value: \"show_ohoo\",\n checked: false,\n },\n {\n label: \"Include Carton Quantity\",\n value: \"show_ctn_qty\",\n checked: true,\n },\n {\n label: \"Barcodes\",\n value: \"show_barcodes\",\n checked: false,\n },\n {\n label: \"Show My Price (if in stock)\",\n value: \"show_storeprice\",\n checked: true,\n },\n {\n label: \"Fallback to List Price if not in stock\",\n value: \"show_listprices\",\n checked: true,\n },\n {\n label: \"Include Cover Page\",\n value: \"include_cover\",\n checked: false,\n },\n {\n label: \"Include Public Comments (layouts: 1 per, 2 per, 5 per)\",\n value: \"show_public_comments\",\n checked: false,\n },\n {\n label: \"Include Private Comments (layouts: 1 per, 2 per, 5 per)\",\n value: \"show_private_comments\",\n checked: false,\n },\n {\n label: \"Include Reviews (layouts: 1 per, 2 per)\",\n value: \"show_reviews\",\n checked: false,\n },\n {\n label: \"Include Biographies (layouts: 1 per, 2 per)\",\n value: \"show_biographies\",\n checked: false,\n },\n {\n label: \"Marketing (layouts: 1 per)\",\n value: \"show_marketing\",\n checked: false,\n }\n ]\n )\n \n const [selectedLayout, setSelectedLayout] = useState(layout[0].key);\n const [form] = Form.useForm();\n\n const onFormFinish = (_f) => {\n _f[\"list_id\"] = list_id;\n\n // [!NEW]\n _f[\"is_catalogue\"] = is_catalogue; \n _f[\"source\"] = \"store\"; \n\n // [!NEW]\n apiCall(\"titlelist/pdf/build\", _f, (_status, _result) =>{\n if(_status){\n window.open(\"/pdf/\" + _result.progress_report_id, \"_blank\")\n }\n })\n\n // apiCall(\"titlelist/getPdf\", _f, (_status, _result) =>{\n // if(_status){\n // window.open(\"/pdf/\" + _result.progress_report_id, \"_blank\")\n // }\n // })\n }\n\n \n\n const isDisabled = (_item) => {\n let a = (selectedLayout === \"threebyfive\" || selectedLayout === \"twobyfour\");\n let b = (selectedLayout === \"onebyfive\");\n let c = (selectedLayout === \"onebytwo\");\n switch (_item.value) {\n case \"show_public_comments\":\n return a;\n case \"show_private_comments\":\n return a;\n case \"show_reviews\":\n return (a || b);\n case \"show_biographies\":\n if (selectedLayout === \"onebyone\") {\n return true;\n }\n return (a || b);\n case \"show_marketing\":\n return (a || b || c);\n default:\n return false;\n }\n }\n\n const onChange = (_val, _ind) => {\n let _options = [...options];\n if (_ind === 5 && !_val) {\n console.log(\"called\")\n _options[6].label = \"Show List Price\";\n }\n if (_ind === 5 && _val) {\n _options[6].label = \"Fallback to List Price if not in stock\";\n }\n _options[_ind].checked = _val;\n setOptions(_options);\n }\n\n const onSelectionChange = (_sel) => {\n switch (_sel) {\n case \"onebyone\":\n form.setFieldsValue({ show_biographies: true });\n break;\n case \"onebytwo\":\n form.setFieldsValue({ show_marketing: \"\" });\n break;\n case \"onebyfive\":\n form.setFieldsValue({ show_reviews: \"\" });\n form.setFieldsValue({ show_biographies: \"\" });\n form.setFieldsValue({ show_marketing: \"\" });\n break;\n default:\n form.setFieldsValue({ show_public_comments: \"\" });\n form.setFieldsValue({ show_private_comments: \"\" });\n form.setFieldsValue({ show_reviews: \"\" });\n form.setFieldsValue({ show_biographies: \"\" });\n form.setFieldsValue({ show_marketing: \"\" });\n break\n }\n setSelectedLayout(_sel)\n }\n\n return (\n <>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Create PDF ({count.toString()} titles)</Typography.Title>\n <Divider />\n <Form form={form} onFinish={(f) => onFormFinish(f)}>\n <Form.Item name=\"layout\" label=\"Layout Option\" initialValue={selectedLayout}>\n <Select onChange={(e) => onSelectionChange(e)} style={{ \"width\": \"200px\" }}>\n {layout.map(item => {\n return (<Select.Option value={item.key}>{item.label}</Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Space direction=\"vertical\">\n {options.map((item, index) => {\n return (\n <Form.Item valuePropName=\"checked\" initialValue={item.checked} name={item.value} noStyle >\n <Checkbox disabled={isDisabled(item)} onChange={(e) => onChange(!item.checked, index)} >  \n <span className={(item.value === \"show_biographies\" && selectedLayout === \"onebyone\") ? \"c\" : \"\"}>{item.label}</span>\n \n </Checkbox>\n </Form.Item>\n )\n })}\n </Space>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Cancel</Button>\n <Button type=\"primary\" htmlType=\"submit\">Create PDF</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </div>\n </>\n )\n}","\nimport react, { useState } from \"react\";\nimport { Select, Checkbox, Space, Button, Modal, Form, Input, Typography, Divider } from \"antd\";\nimport { apiCall, apiDownload } from \"../../utils/Api\";\nimport { useSession } from \"../../utils/Session\";\n\n\nexport default function ListCreateExcel(props) {\n\n const { list_id, close = () => {} } = props;\n const [session, setSession] = useSession(); \n\n\n\n const initOptions = [\n {\n label: \"Include ISBN barcode\",\n value: \"show_barcodes\",\n checked: false,\n },\n {\n label: \"Include \\\"Print Status\\\" column\",\n value: \"show_print_status\",\n checked: false,\n },\n {\n label: \"Include \\\"My Lists\\\" column to reference other lists\",\n value: \"show_my_lists\",\n checked: false,\n },\n {\n label: \"Include comments column\",\n value: \"show_comments\",\n checked: false,\n },\n\n {\n label: \"Include URLs\",\n value: \"include_urls\",\n checked: false,\n },\n\n {\n label: \"Include Class\",\n value: \"show_class\",\n checked: false,\n }\n\n ]\n\n if(session.permissions.titlelist_onhand){\n\n initOptions.push(\n {\n label: \"Include On hand / On Order\",\n value: \"show_oh_oo\",\n checked: false,\n }\n \n )\n }\n\n const [options, setOptions] = useState(initOptions)\n\n const onFormFinish = (_f) => {\n _f[\"list_id\"] = list_id;\n apiDownload(_f, \"titlelist/getExcel\");\n }\n\n const onChange = (_val, _ind) => {\n let _options = [...options];\n _options[_ind].checked = _val;\n setOptions(_options);\n }\n\n\n\n return (\n <>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Create Excel</Typography.Title>\n <Divider style={{\"marginBottom\" : \"10px\"}} />\n <p>To export this title list to Excel format, choose from the display option(s) below and click \"Export\"</p>\n <div className=\"shim\" />\n <Form onFinish={(f) => onFormFinish(f)}>\n <Space direction=\"vertical\">\n {options.map((item, index) => {\n return (\n <Form.Item valuePropName=\"checked\" initialValue={item.checked} name={item.value} noStyle >\n <Checkbox onChange={(e) => onChange(!item.checked, index)} >  {item.label}</Checkbox>\n </Form.Item>\n )\n })}\n </Space>\n\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Cancel</Button>\n <Button type=\"primary\" htmlType=\"submit\">Export</Button>\n </Space>\n </div>\n\n <br clear=\"all\" />\n\n </Form>\n\n\n </div>\n\n </>\n )\n}","import React from \"react\";\nimport { Typography, Divider, Form, Input, Space, Button, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nexport default function ListsCopy(props) {\n\n const { results = {}, setResults=() => { }, list_id = \"\", name = \"\", close = () => {} } = props;\n\n const onFinishForm = (_f) => {\n\n _f[\"list_id\"] = list_id;\n\n apiCall(\"titlelist/copy\", _f, (_status, _result) => {\n if (_status) {\n let res = {...results};\n let ind = res.rows.findIndex(item => item.list_id === list_id);\n res.rows.splice((ind+1), 0, _result)\n setResults(res);\n close(); \n } else {\n message.error(_result.error);\n close(); \n }\n })\n }\n\n return (\n <>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title style={{ \"marginRight\": \"20px\" }} level={5}>Copy {name}</Typography.Title>\n <Divider />\n <Form onFinish={(_f) => onFinishForm(_f)} layout=\"vertical\">\n <Form.Item name=\"new_name\" rules={[{ required: true }]} initialValue={\"(Copy) \" + name} label=\"New name for list\" >\n <Input />\n </Form.Item>\n \n\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Cancel</Button>\n <Button type=\"primary\" htmlType=\"submit\">Copy List</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n\n </div>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { apiCall } from \"../../utils/Api\";\nimport { Modal, Button, Radio, Space, Input, Divider, Typography } from \"antd\";\nimport { FolderOutlined, FolderFilled } from '@ant-design/icons';\nimport { disabledColor, highlightColor } from \"../../utils/Utils\";\nimport conditional from \"../../tools/conditional\";\n\n\nexport default function ListFolder(props) {\n\n const { results, setResults, list_id = \"\", folder = \"\", icon = false, type = \"default\" } = props;\n\n\n // 12 chars\n const [selectedFolder, setSelectedFolder] = useState(folder);\n const [visible, setVisible] = useState(false)\n const [folders, setFolders] = useState([]);\n\n const fetchFolders = () => {\n if (folders.length > 0) {\n setVisible(!visible);\n }\n apiCall(\"titlelist/getFolders\", {}, (_status, _result) => {\n if (_status) {\n setFolders(_result);\n setVisible(true);\n }\n })\n }\n\n\n const updateItem = (_list) => {\n\n props.getLists();\n // let newArr = [...results];\n // newArr[results.findIndex(item => item.list_id === _list.list_id)] = _list;\n // setResults(newArr);\n }\n\n const changeFolder = (_folder, _close = false) => {\n\n apiCall(\"titlelist/changeFolder\", { list_id: list_id, folder: _folder }, (_status, _result) => {\n if (_status) {\n setSelectedFolder(_folder);\n updateItem(_result);\n if (_close) {\n setVisible(false);\n }\n }\n })\n }\n\n\n return (<>\n <Modal\n width={250}\n footer={false}\n visible={visible}\n onCancel={() => setVisible(false)}\n onVisibleChange={(e) => setVisible(false)}\n >\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>Move to folder</Typography.Title>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Radio.Group onChange={(e) => changeFolder(e.target.value)} value={selectedFolder}>\n <Space direction=\"vertical\">\n {folders.map((itm) => {\n return (<Radio value={itm}>{itm}</Radio>)\n })}\n </Space>\n </Radio.Group>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <Typography.Title style={{ \"lineHeight\": \"14px\" }} level={5}><small>Create new</small></Typography.Title>\n <Input.Search maxLength={12} onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n changeFolder(e, true);\n }\n }} onSearch={(e) => changeFolder(e, true)} placeholder={\"Folder name\"} enterButton={\"Add\"} />\n\n </Modal>\n\n <conditional.true value={(icon)}>\n <Button onClick={() => fetchFolders()} size=\"small\" type=\"link\" icon={(!visible) ? <FolderOutlined style={{ \"color\": disabledColor }} /> : <FolderFilled style={{ \"color\": highlightColor }} />} />\n </conditional.true>\n\n <conditional.true value={(!icon)}>\n <Button onClick={() => fetchFolders()} type={type} size=\"small\"><small>{selectedFolder}</small></Button>\n </conditional.true>\n\n\n </>\n )\n}","import React from \"react\";\nimport { Tooltip, Button } from \"antd\";\nimport { DownSquareFilled, DownSquareOutlined } from '@ant-design/icons';\nimport { disabledColor, highlightColor } from \"../../utils/Utils\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function ListArchive(props) {\n\n const { list = {}, results = {}, setResults = () => { } } = props;\n const { list_id = \"\", is_archived = false } = list;\n\n const toggleListArchive = (is_picked) => {\n apiCall(\"titlelist/archive\", { list_id: list_id, is_picked: is_picked }, (_status, _result) => {\n if (_status) {\n let newArr = { ...results };\n let update = results.rows.find(item => item.list_id === _result.list_id);\n update.is_archived = _result.is_archived;\n newArr.rows[results.rows.findIndex(item => item.list_id === _result.list_id)] = update;\n setResults({ ...results, \"rows\": newArr.rows })\n }\n });\n }\n\n return (\n <Tooltip title=\"Archive this List/Catalogue internally so it is no longer Featured or kept in any other folder.\">\n <div onClick={() => toggleListArchive(!is_archived)}>\n <Button size=\"small\" type=\"link\" icon={(!is_archived) ? <DownSquareOutlined style={{ \"color\": disabledColor }} /> : <DownSquareFilled style={{ \"color\": highlightColor }} />} />\n </div>\n </Tooltip>\n );\n\n\n}","import React from \"react\";\nimport { Tooltip, Button } from \"antd\";\nimport { DeleteOutlined, DeleteFilled } from '@ant-design/icons';\nimport { disabledColor, peerColor } from \"../../utils/Utils\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function ListTrash(props) {\n\n const { list = {}, results = {}, setResults = () => { } } = props;\n const { list_id = \"\", is_trashed = false } = list;\n\n const toggleListTrash = (is_picked) => {\n\n apiCall(\"titlelist/trash\", { list_id: list_id, is_picked: is_picked }, (_status, _result) => {\n if (_status) {\n let newArr = { ...results };\n let update = results.rows.find(item => item.list_id === _result.list_id);\n update.is_trashed = _result.is_trashed;\n newArr.rows[results.rows.findIndex(item => item.list_id === _result.list_id)] = update;\n setResults({ ...results, \"rows\": newArr.rows })\n }\n });\n\n }\n\n return (\n <Tooltip title=\"Trash this List/Catalogue internally so it is no longer Featured or kept in any other folder.\">\n <div onClick={() => toggleListTrash(!is_trashed)}>\n <Button size=\"small\" type=\"link\" icon={(!is_trashed) ? <DeleteOutlined style={{ \"color\": disabledColor }} /> : <DeleteFilled style={{ \"color\": peerColor }} />} />\n </div>\n </Tooltip>\n );\n\n\n}","import React from \"react\";\nimport { Tooltip, Button } from \"antd\";\nimport { StarOutlined, StarFilled } from '@ant-design/icons';\nimport { disabledColor, favColor } from \"../../utils/Utils\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function ListFav(props) {\n\n const { list = {}, results = {}, setResults = () => { } } = props;\n const { list_id = \"\", is_starred = false } = list;\n\n const toggleListFav = (is_picked) => {\n\n apiCall(\"titlelist/star\", { list_id: list_id, is_picked: is_picked }, (_status, _result) => {\n if (_status) {\n let newArr = { ...results };\n let update = results.rows.find(item => item.list_id === _result.list_id);\n update.is_starred = _result.is_starred;\n newArr.rows[results.rows.findIndex(item => item.list_id === _result.list_id)] = update;\n setResults({ ...results, \"rows\": newArr.rows })\n }\n });\n\n }\n\n return (\n <Tooltip title=\"Star this List/Catalogue to internally mark it as a favourite.\">\n <div onClick={() => toggleListFav(!is_starred)}>\n <Button size=\"small\" type=\"link\" icon={(!is_starred) ? <StarOutlined style={{ \"color\": disabledColor }} /> : <StarFilled style={{ \"color\": favColor }} />} />\n </div>\n </Tooltip>\n );\n\n\n}","import { Input, Typography, Divider, Button, Space, Form, message } from \"antd\";\nimport React from \"react\";\nimport { apiCall } from \"../../utils/Api\";\nimport { useSession } from \"../../utils/Session\";\n\nexport default function ListNotes(props) {\n\n const { close = () => {}, list_id = \"\", note = \"\", results=[], setResults = () =>{}} = props;\n const [session, setSession] = useSession(); \n\n const onSubmit = (_f) => {\n apiCall(\"titlelist/setNote\", { list_id: list_id, note: _f[\"note\"] }, (_status, _result) => {\n if(_status){\n\n let newArr = { ...results };\n let update = results.rows.find(item => item.list_id === _result.list_id);\n update.note = _result.note;\n newArr.rows[results.rows.findIndex(item => item.list_id === _result.list_id)] = update;\n setResults({ ...results, \"rows\": newArr.rows })\n\n if(_f[\"note\"]){\n message.success('Note added.');\n } else {\n message.success('Note removed.');\n }\n close();\n }\n })\n }\n\n return (\n <>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Notes<span style={{ \"display\": \"block\", \"fontWeight\": \"normal\" }}><small>Notes are private to {session.webstore_name}</small></span></Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <Form onFinish={(_f) => onSubmit(_f)}>\n <Form.Item initialValue={note} name=\"note\" noStyle>\n <Input.TextArea placeholder=\"Write note...\" rows={6} />\n </Form.Item>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Cancel</Button>\n <Button onClick={() => onSubmit({note : \"\"})} danger type=\"primary\">Delete</Button>\n <Button type=\"primary\" htmlType=\"submit\">Save</Button>\n </Space>\n </div>\n </Form>\n <br clear=\"all\" />\n </div>\n </>\n );\n}","import { FacebookFilled, TwitterSquareFilled } from '@ant-design/icons';\nimport { Button, Divider, Input, message, Space, Typography } from \"antd\";\nimport React, { useState } from \"react\";\n\nimport { useSession } from \"../../utils/Session\";\nimport BroadcastMessage from \"../BroadcastMessage\";\nimport { XIcon } from '../icons/XIcon';\n\nexport default function ListShare(props) {\n\n const { close = () => { }, list_id = \"\" } = props;\n const [session, setSession] = useSession();\n const [copyText, setCopyText] = useState(\"Copy\");\n\n const url = window.sitesettings.url + \"lists/\" + list_id;\n const url2 = \"https://share.bookmanager.com/biz/purchasing/browse/filter/x/\"+list_id+\"/v/sequence\";\n\n \n const CopyButton = (props) => {\n const { path = \"\" } = props\n const [copied, setCopied] = useState(false);\n\n const copyToClipboard = (_str) => {\n if (!navigator.clipboard) {\n message.error(\"Can't copy\");\n return;\n }\n navigator.clipboard.writeText(path);\n setCopied(true);\n setTimeout(() => {\n setCopied(false)\n }, 1000);\n }\n return (<Button onClick={(e) => copyToClipboard(e)} type={(copied ? \"default\" : \"primary\")}>{(copied) ? \"Copied\" : \"Copy\"}</Button>);\n }\n\n const copyLink = () => {\n navigator.clipboard.writeText(url);\n setCopyText(\"Copied\")\n }\n\n return (\n <>\n <div style={{ \"padding\": \"25px\" }}>\n <Typography.Title level={5}>Share</Typography.Title>\n <Typography.Paragraph>To share this list with <strong>customers</strong>, copy this link (e.g. Ctrl-C) and then paste it into an email.</Typography.Paragraph>\n <Space>\n <Input style={{ \"width\": \"400px\" }} defaultValue={url} />\n <CopyButton path={url} />\n </Space>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Typography.Paragraph>To share this list with reps or other <strong>bookmanager stores</strong>, copy this link (e.g. Ctrl-C) and then paste it into an email.</Typography.Paragraph>\n <Space>\n <Input style={{ \"width\": \"400px\" }} defaultValue={url2} />\n <CopyButton path={url2} />\n </Space>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <BroadcastMessage title=\"Send list to staff member screen\" path={url2} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Typography.Paragraph>Share on social media</Typography.Paragraph>\n \n <Space size={5}>\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={\"https://twitter.com/share?url=\" + url}><Button type=\"text\" icon={<XIcon style={{ \"fontSize\": \"32px\", \"color\": \"#000\" }} />} /></a>\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={\"https://www.facebook.com/sharer/sharer.php?u=\" + url}><Button type=\"text\" icon={<FacebookFilled style={{ \"fontSize\": \"32px\", \"color\": \"#4267B2\" }} />} /></a>\n </Space>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Cancel</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n </>\n );\n}","import React, { useState, useEffect, useRef } from \"react\";\nimport { Space, Button } from \"antd\";\nimport conditional from \"../tools/conditional\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport { makeKey } from \"../utils/Utils\";\n\n\nexport default function Renderer(props) {\n\n\n const ref = useRef();\n const [startY, setStartY] = useState(0);\n const { key, close = false } = props;\n const [showClose, setShowClose] = useState(close);\n const [component, setComponent] = useState();\n\n const [hash, setHash] = useState(makeKey());\n\n\n const getLoadPosition = () => {\n setComponent(null);\n setStartY(window.scrollY);\n }\n\n useEffect(getLoadPosition, []);\n\n const drawComponent = (_component, _hide_close = false, _scroll = false) => {\n\n\n if (_hide_close) {\n setShowClose(false);\n }\n\n if (JSON.stringify(component) === JSON.stringify(_component)) {\n setComponent(null);\n\n\n } else {\n\n\n setComponent(_component);\n\n // if(_scroll){\n // window.scrollTo({\n // top: document.getElementById(hash).offsetTop + 212,\n // left: 0,\n // behavior: 'smooth'\n // });\n // } \n }\n }\n\n const drawClose = () => {\n\n if (!showClose) {\n return (<></>);\n }\n\n return (\n <conditional.true value={(component)}>\n <div className=\"closebar\"><Button style={{ \"float\": \"right\" }} onClick={() => setComponent(null)} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} /><br clear=\"both\" /></div>\n </conditional.true>\n )\n }\n\n const drawBreak = () => {\n return (\n <conditional.true value={(component)}>\n <div className=\"endbreak\" />\n </conditional.true>\n )\n }\n\n const style = {\n \"marginLeft\": \"-44px\", \"paddingLeft\": \"20px\", \"borderLeft\": \"24px solid rgb(23, 125, 220, 0.3)\"\n }\n const nostyle = {\n }\n\n\n const scrollIntoViewWithOffset = (selector, offset) => {\n window.scrollTo({\n behavior: 'smooth',\n top:\n selector.getBoundingClientRect().top -\n document.body.getBoundingClientRect().top -\n offset,\n })\n }\n\n \n\n const barClose = (e) => {\n // stop prop\n e.stopPropagation();\n e.preventDefault();\n // console.log(startY);\n // window.scrollTo(0, startY);\n setComponent(null);\n\n scrollIntoViewWithOffset(ref.current, 280)\n\n\n }\n\n return (\n <div ref={ref} key={key}>\n\n\n {React.cloneElement(props.children, { drawComponent: drawComponent })}\n {drawBreak()}\n {drawClose()}\n <div onClick={(e) => {\n if (e.nativeEvent.offsetX < 0) {\n barClose(e)\n }\n }} style={(component) ? style : nostyle}>\n\n <div id={hash}>\n {((component) && <div style={{ \"position\": \"absolute\", \"marginLeft\": \"-44px\" }}>\n <Button onClick={(e) => barClose(e)} size=\"small\" type=\"link\" icon={<small><CloseOutlined className=\"anticon-close2\" style={{ \"fontSize\": \"10px\" }} /></small>} />\n <div className=\"shim invert\" style={{ \"height\": \"1px\", \"opacity\": \"0.1\" }} />\n </div>\n )}\n {component}\n </div>\n {(component && <div id={hash} onClick={(e) => barClose(e)} className=\"shim\" style={{ \"backgroundColor\": \"rgb(23, 125, 220, 0.3)\", \"height\": \"24px\", \"margin\": \"0px -20px\" }}>\n <div style={{ \"marginLeft\": \"-24px\" }}>\n <div className=\"shim invert\" style={{ \"height\": \"1px\", \"opacity\": \"0.1\" }} />\n <Button onClick={(e) => barClose(e)} size=\"small\" type=\"text\" icon={<small><CloseOutlined className=\"anticon-close2\" style={{ \"fontSize\": \"10px\", \"fontWeight\" : \"bold\" }} /></small>} />\n </div>\n\n </div>)}\n </div>\n\n\n\n\n </div>\n );\n}","import React from \"react\";\nimport { Row, Col, Pagination, Space } from \"antd\";\nimport { addCommas } from \"../utils/Utils\";\nimport conditional from \"../utils/conditional\";\nimport Cookies from \"js-cookie\";\nexport default function Paginate(props) {\n const {\n save = \"\",\n paginate = { current: 1, pagesize: 20, offset: 0 },\n setPaginate = () => { },\n show_pagination = true,\n pageSizeOptions = [10, 20, 50],\n precomponent = null,\n component = null,\n showSizeChanger = true,\n count = 0,\n hide_single = false,\n showing_right = false,\n loading = false,\n } = props;\n\n const itemRender = (_, type, originalElement) => {\n if (type === 'prev') {\n return <a style={{\"margin\": \"5px\"}}>Previous</a>;\n }\n if (type === 'next') {\n return <a style={{\"margin\": \"5px\"}}>Next</a>;\n }\n return originalElement;\n };\n\n\n const drawShowing = () => {\n let end = paginate.current * paginate.pagesize;\n let start = (paginate.current * paginate.pagesize) - (paginate.pagesize - 1);\n if (end > count) {\n end = count;\n }\n if (count === 0) {\n return \"0\";\n }\n return addCommas(start) + \" to \" + addCommas(end);\n }\n\n const pageChange = (_page, _limit) => {\n let _offset = (_page - 1) * _limit;\n if (_limit !== paginate.pagesize) {\n _offset = 0;\n _page = 1;\n if (save) {\n Cookies.set(save, _limit, { expires: 365 });\n }\n }\n setPaginate({\n pagesize: _limit,\n offset: _offset,\n current: _page\n })\n }\n if ((hide_single && paginate.pagesize > count)) {\n return (<></>);\n }\n const drawShowingText = () => {\n return (<>Showing <em style={{ \"fontWeight\": \"500\" }}>{drawShowing()}</em> of <em style={{ \"fontWeight\": \"500\" }}>{addCommas(count)}</em> results</>)\n }\n\n return (\n <>\n <div className=\"paginate\" style={{}}>\n <div className=\"float-flex\">\n <div style={{ \"padding\": \"10px 20px\" }}>\n {(precomponent && precomponent)}\n {(!showing_right && drawShowingText())}\n {(component && component)}\n </div>\n <div>\n <Space>\n {(showing_right && drawShowingText())}\n <div style={{ \"paddingRight\": \"20px\", \"textAlign\": \"right\" }}>\n <div className=\"shim\" /><div className=\"shim\" />\n <conditional.true value={(show_pagination)} >\n <Pagination \n pageSizeOptions={pageSizeOptions} \n size=\"small\" \n showSizeChanger={showSizeChanger} \n itemRender={itemRender}\n current={paginate.current} \n pageSize={paginate.pagesize} \n total={count} \n onChange={(_page, _limit) => pageChange(_page, _limit)} \n />\n </conditional.true>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </Space>\n </div>\n </div>\n </div>\n </>\n )\n}","import { AppstoreOutlined, BarChartOutlined, CloseOutlined, MenuOutlined, PicLeftOutlined, ProfileOutlined, SelectOutlined, ShareAltOutlined } from '@ant-design/icons';\nimport { Button, Col, Divider, Form, Input, Layout, Pagination, Radio, Row, Select, Space, Spin, Table, Typography } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport LazyLoad from \"react-lazy-load\";\n\nimport conditional from \"../../tools/conditional\";\nimport { apiCall } from \"../../utils/Api\";\nimport { useSession } from \"../../utils/Session\";\nimport { bestsellerColor, drawQuantity, futureColor, parseSubjectsWeird, peerColor, successColor, warningColor } from \"../../utils/Utils\";\nimport ItemLayouts from \"../ItemLayouts\";\nimport Overlay from \"../Overlay\";\nimport Paginate from \"../Paginate\";\nimport Renderer from \"../Renderer\";\nimport TestOrderBox from \"../TestOrderBox\";\nimport Cookies from 'js-cookie';\n\nexport default function TitleResults(props) {\n\n const { \n isbn = \"\", \n term = \"\", \n type = \"keyword\", \n name = \"\", \n has_close = true, \n drawComponent = () => { }, \n related = false, \n series = false,\n more_sizes = false,\n more_size_rows = [],\n } = props;\n\n const ref = useRef();\n const [results, setResults] = useState({ rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [session, setSession] = useSession();\n const [pageSize, setPageSize] = useState(20);\n const [current, setCurrent] = useState(1);\n\n\n const [filters, setFilters] = useState({\n term: term,\n display: Cookies.get(\"last_sub_display\") || \"list\",\n sort: \"date\",\n show_details: false\n });\n\n const [searchFilters, setSearchFilters] = useState(\n {\n o: 0, // offset\n l: 10, // limit\n }\n )\n\n const scrollIntoViewWithOffset = (selector, offset) => {\n window.scrollTo({\n behavior: 'smooth',\n top:\n selector.getBoundingClientRect().top -\n document.body.getBoundingClientRect().top -\n offset,\n })\n }\n\n useEffect(() => {\n if (loading) { scrollIntoViewWithOffset(ref.current, 280) }\n }, [])\n\n\n const getItems = () => {\n let _filters = { ...searchFilters }\n _filters.t = term;\n _filters.k = type;\n setLoading(true);\n // related category flagged, use related \n if (related) {\n if(related !== \"related\"){\n apiCall(\"title/getRelatedEditionsDetails\", { isbn: isbn, detail_category: related, limit: searchFilters.l, offset: searchFilters.o }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n })\n }\n setLoading(false);\n return; \n }\n // series category flagged, use related \n if (series) {\n \n apiCall(\"browse/get\", { z : series, l: searchFilters.l, o: searchFilters.o }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n setLoading(false);\n })\n return; \n }\n // Not related, regular browse call\n if (!related) {\n if(isbn){\n _filters.exclude_isbn = isbn; \n }\n apiCall(\"browse/get\", _filters, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setLoading(false);\n }\n })\n }\n }\n\n useEffect(getItems, [searchFilters.o, searchFilters.l]);\n\n const colorDate = (_timestamp) => {\n let now = moment().unix();\n let color = \"inherit\";\n if (_timestamp > now) {\n // future\n color = futureColor;\n } else {\n // within the last two months\n if ((now - _timestamp) < 5274000) {\n // within the last two months\n color = successColor;\n }\n }\n return color;\n }\n\n\n const pageChange = (_page, _limit) => {\n setPageSize(_limit);\n setCurrent(_page);\n let _offset = (_page - 1) * _limit;\n setSearchFilters({ ...searchFilters, \"o\": _offset, \"l\": _limit });\n }\n\n\n const columns = [\n {},\n {\n title: <small>PubDate</small>, dataIndex: 'release_date', key: 'release_date', render: (e) => {\n return <span style={{ \"color\": colorDate(e) }}>{moment(e * 1000).format(\"MMMD-YY\")}</span>;\n }\n },\n {\n title: <small>Rank</small>, dataIndex: 'rank', key: 'rank', render: (e) => {\n return (e.hasOwnProperty(\"bestseller\") ? <span style={{ \"color\": bestsellerColor }}>{e.bestseller}</span> : <span style={{ \"color\": futureColor }}>{e.future}</span>);\n }\n },\n {\n title: <small>Cart</small>, dataIndex: 'cart', key: 'cart', render: (e, f) => {\n return (<Overlay width={750} component={<TestOrderBox wrap data={f} isbn={f.isbn} />}>{drawQuantity(f.isbn, session.cart)}</Overlay>)\n }\n },\n {\n title: <small>OH</small>, dataIndex: 'onhand', key: 'onhand', render: (e, f) => {\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"color\": successColor, \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\" }}>{item.onhand} </div>\n })}\n {/* {getPeerFromSales(f.sales)} */}\n </>\n );\n }\n },\n {\n title: <small>OO</small>, dataIndex: 'onorder', key: 'onorder', render: (e, f) => {\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"color\": warningColor, \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\" }}>{item.onorder} </div>\n })}\n\n {/* {getPeerFromSales(f.sales, false)} */}\n </>\n );\n }\n },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e, f) => {\n\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"fontWeight\": \"normal\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\", \"color\": (item.code) ? bestsellerColor : \"normal\" }}>${item.row_price} </div>\n })}\n <div> </div>\n </>\n );\n\n }\n },\n { title: <small>Bd</small>, dataIndex: 'binding_code', key: 'binding_code' },\n {\n title: <small>Title</small>, className: \"nowrap250\", dataIndex: 'title', key: 'title', render: (e, f) => {\n return (<a onClick={() => expandCell(f)}>{e}{(f.subtitle) ? \" : \" + f.subtitle : \"\"}</a>)\n }\n },\n {\n title: <small>Author</small>, className: \"nowrap\", dataIndex: 'authors', key: 'authors', render: (e) => {\n return e.map(item => item.name).join(\", \")\n }\n },\n { title: <small>Series</small>, className: \"nowrap\", dataIndex: 'series', key: 'series' },\n { title: <small>#</small>, dataIndex: 'series_num', key: 'series_num' },\n {\n title: <small>Subjects</small>, dataIndex: 'subjects', key: 'subjects', render: (e) => {\n return <span>\n {parseSubjectsWeird(e, 15)}\n </span>;\n }\n },\n { title: <small>Publisher</small>, className: \"nowrap\", dataIndex: 'publisher', key: 'publisher' },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn' },\n ]\n\n const drawChildTable = (_record) => {\n return (\n <>\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <div className=\"shim\" /> <div className=\"shim\" /> <div className=\"shim\" />\n <Renderer close={false}><ItemLayouts data={_record} display=\"details2\" /></Renderer>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </>\n )\n }\n\n const expandCell = (_data, _type) => {\n if (!expanded.includes(_data.isbn)) {\n setExpanded([_data.isbn]);\n } else {\n setExpanded([]);\n }\n }\n\n const drawPagination = () => {\n return (\n <div style={{ \"margin\": \"0px -20px\" }}>\n <Paginate\n loading={loading}\n paginate={{ current: current, offset: (searchFilters).hasOwnProperty(\"o\") ? searchFilters.o : 0, pagesize: (searchFilters).hasOwnProperty(\"l\") ? searchFilters.l : 20 }} setPaginate={(e) => {\n setCurrent(e.current);\n setSearchFilters({ ...searchFilters, \"o\": e.offset, \"l\": e.pagesize });\n }} count={results.row_count } />\n </div>\n )\n }\n\n const drawFilters = () => {\n return (\n <div style={(has_close) ? { marginBottom: \"0px\" } : { marginTop: \"-1px\" }} className=\"closebar\">\n <Form size=\"small\" layout=\"vertical\">\n <conditional.true value={(!has_close)}>\n <div style={{ \"height\": \"8px\" }} className=\"shim\" />\n </conditional.true>\n <div style={{ \"padding\": \"20px\", \"paddingBottom\": \"0px\" }}>\n <div className=\"float-flex\">\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>{name}</Typography.Title>\n <div style={{ \"paddingRight\": \"6px\", \"marginTop\": \"-6px\" }}>\n <Radio.Group size=\"small\" value={filters.display} onChange={(e) => {\n\n Cookies.set(\"last_sub_display\", e.target.value);\n setFilters({ ...filters, \"display\": e.target.value })\n \n }} buttonStyle=\"solid\">\n <Radio.Button value={\"details2\"}><small><PicLeftOutlined /></small></Radio.Button>\n <Radio.Button value={\"list\"}><small><MenuOutlined /></small></Radio.Button>\n <Radio.Button value={\"cards\"}><small><AppstoreOutlined /></small></Radio.Button>\n </Radio.Group>\n </div>\n </div>\n <div className=\"shim\" style={{ \"height\": \"8px\" }} />\n </div>\n </Form>\n </div>\n )\n }\n\n const drawResults = () => {\n return (\n <div>\n <div ref={ref}></div>\n <conditional.true value={(filters.display === \"list\")}>\n <div style={{ \"margin\": \"0 -20px\" }}>\n <Table\n size=\"small\"\n pagination={false}\n rowKey={\"isbn\"}\n loading={loading}\n columns={columns}\n dataSource={results.rows}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </div>\n </conditional.true>\n <conditional.true value={(filters.display !== \"list\")}>\n <br />\n <Spin spinning={loading}>\n {/* Split into chunks so renderer can draw placeholder */}\n <conditional.true key={\"cards\"} value={(filters.display === \"cards\")}>\n <div>\n {results.rows.reduce((all, one, i) => {\n const ch = Math.floor(i / 5);\n all[ch] = [].concat((all[ch] || []), one);\n return all\n }, []).map((item, index) => {\n return <div key={item[0].isbn}><Renderer><ItemLayouts data={item} index={index} display={filters.display} /></Renderer><Divider dashed /></div>\n })}\n </div>\n </conditional.true>\n <conditional.true value={(filters.display !== \"cards\")}>\n <div>\n {results.rows.map((item) => {\n return <div key={item.isbn}><Renderer close={false}><ItemLayouts data={item} display={filters.display} /></Renderer> <Divider dashed /></div>\n })}\n </div>\n </conditional.true>\n </Spin>\n </conditional.true>\n </div>\n )\n }\n\n if (results.rows.length < 1 && !loading) {\n return \"No related titles found.\";\n }\n\n return (\n <div>\n {drawFilters()}\n <conditional.true value={related !== \"related\"}>\n {drawPagination()}\n </conditional.true>\n {drawResults()}\n <conditional.true value={related !== \"related\"}>\n {drawPagination()}\n </conditional.true>\n </div>\n )\n}","import React, {useEffect} from \"react\";\nimport { BookOutlined, BookFilled } from '@ant-design/icons';\nimport { Tooltip, Popover, Space, Button } from \"antd\";\nimport { objectToPath } from \"../utils/Utils\";\nimport { apiCall } from \"../utils/Api\";\nimport { useSession } from \"../utils/Session\";\nexport default function Bookmark(props) {\n\n const { link = false, searchFilters = {}, isbn = \"\", list_id = \"\" } = props;\n const [session, setSession] = useSession();\n\n const addBookmark = () => {\n \n let sf = { ...searchFilters };\n apiCall(\"titlelist/setBookmark\", { list_id: list_id, isbn: isbn, url: objectToPath(sf) }, (_status, _result) => {\n if (_status) {\n setSession({ ...session, \"titlelist_bookmarks\": _result })\n }\n })\n }\n\n const removeBookmark = () => {\n apiCall(\"titlelist/removeBookmark\", { list_id: list_id }, (_status, _result) => {\n if (_status) {\n setSession({ ...session, \"titlelist_bookmarks\": _result })\n }\n })\n }\n\n const linkOut = (_path) => {\n window.open(\"/purchasing/browse\" + _path + \"#bookmark\", \"_blank\");\n }\n\n\n const scrollToMe = () => {\n if (session.titlelist_bookmarks.find(item => item.isbn === isbn)) {\n if(window.location.hash.includes(\"#bookmark\")){\n setTimeout(() => {\n window.location.href = \"#bookmark\";\n }, 100)\n }\n }\n }\n\n useEffect(scrollToMe, [])\n\n const drawLink = () => {\n let _obj = session.titlelist_bookmarks.find(item => item.titlelist_id === list_id);\n if (!_obj) {\n return <div style={{ \"width\": \"22px\" }}> </div>;\n }\n return (\n <Popover overlayInnerStyle={{ \"padding\": \"0px\" }} placement=\"bottom\" content={\n <Space direction=\"vertical\">\n <Button block type=\"primary\" onClick={() => linkOut(_obj.url)} size=\"small\"><small>Go to bookmark</small></Button>\n <Button onClick={() => removeBookmark()} block danger size=\"small\"><small>Remove this bookmark</small></Button>\n </Space>\n }>\n <div style={{ \"padding\": \"0px 5px\" }}>\n <BookFilled style={{ \"color\": \"#ff6633\", \"cursor\": \"pointer\" }} />\n </div>\n </Popover>\n )\n }\n\n if (!list_id) {\n return (<></>)\n }\n\n if (link) {\n return drawLink();\n }\n\n return (\n <div onClick={() => {\n if (session.titlelist_bookmarks.find(item => item.isbn === isbn)) {\n removeBookmark();\n } else {\n addBookmark();\n }\n }} style={{ \"position\": \"absolute\", \"marginLeft\": \"-46px\", \"color\": \"#aaa\", \"cursor\": \"pointer\" }}>\n {(session.titlelist_bookmarks.find(item => item.isbn === isbn)) ? <Tooltip title=\"Remove bookmark\"> <div id=\"bookmark\" style={{\"position\" : \"absolute\", \"top\" : \"-100px\"}}></div><BookOutlined style={{ \"color\": \"#ff6633\", \"fontSize\": \"12px\" }} /></Tooltip> : <Tooltip title=\"Bookmark this title to remember your place in this list.\"><BookOutlined style={{ \"color\": \"#aaa\", \"fontSize\": \"12px\" }} /></Tooltip>}\n </div>)\n}","import React from \"react\";\nimport { Modal, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function ListDelete(props) {\n\n const { list_id = \"\", name = \"\", results = {rows : [], row_count : 0}, setResults = () => { } } = props;\n\n const confirmDelete = () => {\n Modal.confirm({title : \"Delete list?\", onOk : () => deleteList(), content : <>Are you sure you want to delete the list \"<em style={{\"fontWeight\" : \"600\"}}>{name}</em>\"?</>})\n }\n\n const deleteList = () => {\n\n apiCall(\"titlelist/delete\", {list_id : list_id}, (_status, _result) => {\n\n if(_status){\n message.success(\"List deleted successfully.\");\n let _rows = results.rows.filter(item => item.list_id !== list_id);\n setResults({...results, \"rows\" : _rows, \"row_count\" : results.row_count - 1 || 0});\n } else {\n message.error(_result.error);\n }\n })\n }\n\n return (\n <div onClick={() => confirmDelete()}>\n {props.children}\n </div>\n );\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Divider, Space, Typography, Tag, Button, Popover, Alert, Badge } from \"antd\";\nimport { DeleteFilled, StarFilled, DownSquareFilled, BookFilled, BookOutlined, CloseOutlined, SlidersOutlined } from '@ant-design/icons';\nimport SliderItem from \"../SliderItem\";\nimport Slider from \"../Slider\";\nimport { disabledColor, addCommas, removeNulls, parseAuthors } from \"../../utils/Utils\";\nimport moment from \"moment\";\nimport conditional from \"../../utils/conditional\";\nimport Peek from \"../Peek\";\nimport Overlay from \"../Overlay\";\nimport ListEdit from \"./ListEdit\";\nimport ListCreatePdf from \"./ListCreatePdf\";\nimport ListCreateExcel from \"./ListCreateExcel\";\nimport ListsCopy from \"./ListsCopy\";\nimport ListFolder from \"./ListFolder\";\nimport ListArchive from \"./ListArchive\";\nimport ListTrash from \"./ListTrash\";\nimport ListFav from \"./ListFav\";\nimport ListNotes from \"./ListNotes\";\nimport ListShare from \"./ListShare\";\nimport Renderer from \"../Renderer\";\nimport ItemLayouts from \"../ItemLayouts\";\nimport TitleResults from \"../title/TitleResults\";\nimport { useHistory } from \"react-router-dom\";\nimport Bookmark from \"../Bookmark\";\nimport ListDelete from \"./ListDelete\";\nimport Html from \"../../utils/Html\";\nimport BusinessContactInfo from \"../BusinessContactInfo\";\n\nexport default function ListItem(props) {\n\n const { is_catalogue = false, drawComponent = () => { }, results = {}, setResults = () => { }, data = {} } = props;\n const history = useHistory();\n const {\n list_id = \"\",\n actual_id = 0,\n is_dynamic = false,\n owner_name = \"\",\n category = \"\",\n in_list = false,\n subcategory = \"\",\n season = \"\",\n vendor = { name: \"\", acct: \"\", id: \"\" },\n agency = { name: \"\", acct: \"\", id: \"\" },\n subject = \"\",\n note = \"\",\n note_posted = \"\",\n name = \"\",\n date_posted = null,\n date_updated = null,\n date_created = null,\n views = null,\n description = \"\",\n folder = \"\",\n is_starred = false,\n is_archived = false,\n is_deleted = false,\n onhand = null,\n onorder = null,\n sequence = null,\n isbns = [],\n isbns_count = 0,\n site_content = false,\n bookmark_data = null,\n } = removeNulls(data);\n\n\n const linkOut = (_id) => {\n window.open(\"/purchasing/browse/filter/x/\" + _id + \"/v/sequence\", \"_blank\");\n }\n\n\n function dateFormat(date) {\n //broke this out to make the return a little cleaner, and it's reusable\n return moment(date * 1000).format(\"MMMM D YYYY h:mma\");\n }\n\n\n const ListImage = (props) => {\n const { img = {} } = props;\n const [imgError, setImageError] = useState(false);\n return (\n <>\n {(imgError && <>\n <div style={{ \"height\": \"150px\", \"width\": \"110px\" }} className=\"card-fallback-small\">\n <div style={{ \"fontSize\": \"12px\" }}><strong>{img.title}</strong></div>\n <div className=\"shim\" /><div className=\"shim\" />\n <small><em>{parseAuthors(img.authors, \"#000\", \"12px\")}</em></small>\n </div>\n </>)}\n {(!imgError && <>\n <img className=\"shadow-large\" style={drawImage(img.highlight)} onError={(e) => setImageError(true)} src={\"https://cdn1.bookmanager.com/i/slider_23.php?b=\" + img.eisbn + \"&cb=\" + img.cover_image_cache} />\n </>)}\n\n </>\n\n )\n }\n\n\n function drawCardBorder(highlight) {\n if (highlight) {\n return {\n top: \"-15px\",\n lineHeight: \"12px\",\n padding: \"1px 2px\",\n backgroundColor: \"#ff0099\",\n }\n }\n return {\n top: \"-15px\",\n lineHeight: \"12px\",\n padding: \"1px 2px\",\n }\n }\n\n function badgeText() {\n return \"Highlighted\"\n }\n\n function drawImage(highlight) {\n if (highlight) {\n return {\n borderStyle: \"solid\",\n borderColor: \"#ff0099\",\n borderWidth: \"3px\",\n maxHeight: \"150px\",\n }\n }\n return {\n maxHeight: \"150px\",\n }\n }\n\n return (\n <>\n <div className=\"shim\" /><div className=\"shim\" />\n <div className=\"hideHover\">\n <div className=\"float-flex\">\n <div>\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}><a onClick={() => linkOut(list_id)}>{name} <small style={{ \"fontWeight\": \"normal\" }} className=\"c\" > - {addCommas(isbns_count)} titles {(is_dynamic && <><small><em>(Dynamic)</em></small></>)}</small></a>\n <br clear=\"both\" />\n <span className=\"c\" style={{ \"fontSize\": \"13px\", \"display\": \"block\" }}>\n <Overlay width={700} component={<div style={{ \"padding\": \"20px\" }}><strong>Contact</strong><Divider dashed style={{ \"margin\": \"10px 0px\" }} /><div className=\"shim\" /><div style={{ \"margin\": \"-8px\" }}><BusinessContactInfo id={vendor.id} /></div></div>}><a style={{ \"textAlign\": \"left\", \"maxWidth\": \"250px\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"whiteSpace\": \"nowrap\" }}>{vendor.name}</a></Overlay>\n </span>\n <span className=\"c\" style={{ \"fontSize\": \"13px\", \"display\": \"block\" }}>\n <Overlay width={700} component={<div style={{ \"padding\": \"20px\" }}><strong>Contact</strong><Divider dashed style={{ \"margin\": \"10px 0px\" }} /><div className=\"shim\" /><div style={{ \"margin\": \"-8px\" }}><BusinessContactInfo id={agency.id} /></div></div>}><a style={{ \"textAlign\": \"left\", \"maxWidth\": \"250px\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"whiteSpace\": \"nowrap\" }}>{(agency.name) ? <>REP: {agency.name}</> : <></>}</a></Overlay>\n </span>\n <Space>\n {(category && <span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\" }}><em><span style={{ \"fontWeight\": \"normal\" }}>Category:</span> {category}  </em></span>)}\n {(season && <span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\" }}><em><span style={{ \"fontWeight\": \"normal\" }}>Season: </span>{season}  </em></span>)}\n <span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><em>List: {actual_id} </em> </span>\n {(folder && <span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><em>Folder:<ListFolder type=\"link\" getLists={props.getLists} folder={folder} list_id={list_id} isbns={isbns} >{folder} </ListFolder></em> </span>)}\n </Space>\n <div className=\"shim\" />\n </Typography.Title>\n </div>\n <div>\n <div style={{ \"float\": \"right\", \"textAlign\": \"right\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <Space size={0}>\n <Bookmark list_id={list_id} link />\n <ListFav getLists={props.getLists} list={data} results={results} setResults={setResults} />\n <ListArchive list={data} results={results} setResults={setResults} />\n <ListTrash list={data} results={results} setResults={setResults} />\n {(is_catalogue && <ListFolder getLists={props.getLists} folder={folder} list_id={list_id} isbns={isbns} icon={true} ></ListFolder>)}\n\n </Space>\n </Typography.Paragraph>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <span>Updated: </span><span style={{ \"fontWeight\": \"normal\" }}>{dateFormat(date_updated)}</span><br />\n <conditional.true value={(date_posted)}>\n <span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><em>Posted: {dateFormat(date_posted)}</em></span>\n </conditional.true>\n {(owner_name && <span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><em>Managed by: {owner_name}  </em></span>)}\n </Typography.Paragraph>\n </div>\n </div>\n </div>\n\n <div className=\"shim\"></div>\n {/* Max 11 wide */}\n <div style={{ \"maxHeight\": \"170px\", \"width\": \"1196px\" }}>\n {/* <Slider> */}\n <Space>\n <SliderItem action={() => linkOut(list_id)} key={\"498395\"}>\n <img className=\"shadow-large\" style={{ \"maxHeight\": \"150px\" }} onError={(e) => e.target.style.display = 'none'} src={\"https://cdn1.bookmanager.com/tl_img?def_id=\" + actual_id} />\n </SliderItem>\n {isbns.slice(0, 7).map(img => {\n return (\n <>\n <conditional.true value={img.highlight}>\n <div style={drawCardBorder(img.highlight)}>\n <small className=\"c\" style={img.highlight ? { \"color\": \"#FFFFFF\" } : null}><strong>{img.highlight ? \"Highlighted\" : \"\"}</strong></small>\n </div>\n <SliderItem key={img.isbn} isbn={img.isbn} action={() => drawComponent(\n <div key={img.isbn}>\n <div style={{ \"padding\": \"0 0px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"1px solid\" }} className=\"closebar bc\">\n <Button style={{ \"float\": \"right\" }} onClick={() => drawComponent(null)} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n <Renderer><ItemLayouts display=\"details2\" isbn={img.isbn} catalogue_id={list_id} /></Renderer>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>)}>\n <img className=\"shadow-large\" style={drawImage(false)} onError={(e) => e.target.src = \"/no-cover.png\"} src={\"https://bookmanager.com/i/slider_im.php?b=\" + img.eisbn} />\n </SliderItem>\n </conditional.true>\n <conditional.true value={!img.highlight}>\n <SliderItem key={img.isbn} isbn={img.isbn} action={() => drawComponent(<div style={{ \"cursor\": \"pointer\" }} key={img.isbn}>\n <div style={{ \"padding\": \"0 0px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"1px solid\" }} className=\"closebar bc\">\n <Button style={{ \"float\": \"right\" }} onClick={() => drawComponent(null)} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n <Renderer><ItemLayouts display=\"details2\" isbn={img.isbn} /></Renderer>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>)}>\n <ListImage img={img} />\n </SliderItem>\n </conditional.true>\n </>\n\n )\n })}\n {((isbns_count > 7) && <div onClick={() => linkOut(list_id)} style={{ \"textAlign\": \"center\", \"width\": \"100px\" }}><small><a>View all <br />{isbns_count} titles</a></small></div>)}\n </Space>\n {/* </Slider> */}\n </div>\n </div>\n \n <conditional.true value={(description && !site_content)}>\n <div><div className=\"shim\" /><div className=\"shim\" /><span style={{ \"color\": disabledColor, \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><Html html={description} /></span><div className=\"shim\" /></div>\n </conditional.true>\n <conditional.true value={(isbns.length > 0)}>\n <div style={{ \"float\": \"right\" }}>\n <Button onClick={() => linkOut(list_id)} size=\"small\"><small>View all {addCommas(isbns_count)} titles</small></Button>\n </div>\n </conditional.true>\n\n <conditional.true value={(note)}>\n <div style={{ \"maxWidth\": \"500px\" }}>\n <Alert style={{ \"padding\": \"5px 10px\" }} description={<div style={{ \"marginTop\": \"-10px\" }}><small>{note}</small></div>} message={<div><small><div style={{ \"float\": \"right\" }}>{(note_posted) ? <small>{moment(note_posted * 1000).format(\"MMM D, YYYY\")}</small> : \"\"}</div> Private notes:</small></div>} type=\"warning\" />\n <br />\n </div>\n </conditional.true>\n\n <Space size={0}>\n {((!is_catalogue) && <Tag className=\"tag-btn cataloguebtn\" color={disabledColor}><Overlay maskClosable={false} width={700} component={<ListEdit results={results} setResults={setResults} data={data} />}>Edit</Overlay></Tag>)}\n {(!is_dynamic && <Tag className=\"tag-btn cataloguebtn\" color={disabledColor}><Overlay width={450} component={<ListsCopy results={results} setResults={setResults} list_id={list_id} name={name} />}>Copy</Overlay></Tag>)}\n {((!is_catalogue) && <ListDelete name={name} results={results} setResults={setResults} list_id={list_id} ><Tag className=\"tag-btn cataloguebtn\" color={disabledColor}>Delete</Tag></ListDelete>)}\n <Tag className=\"tag-btn cataloguebtn\" color={disabledColor}><Overlay width={450} component={<ListNotes results={results} setResults={setResults} note={note} list_id={list_id} />}>My Notes</Overlay></Tag>\n {/* <Tag className=\"tag-btn\" color={disabledColor}>Email</Tag> */}\n <Tag className=\"tag-btn cataloguebtn\" color={disabledColor}><Overlay component={<ListCreateExcel list_id={list_id} />} width={500}>Excel</Overlay></Tag>\n <Tag className=\"tag-btn cataloguebtn\" color={disabledColor}><Overlay component={<ListCreatePdf is_catalogue={is_catalogue} count={isbns_count} list_id={list_id} />} width={500}>PDF</Overlay></Tag>\n <Tag onClick={() => window.open(\"/print/list/\" + list_id, \"_blank\")} className=\"tag-btn cataloguebtn\" color={disabledColor}>Print</Tag>\n <Tag className=\"tag-btn cataloguebtn\" color={disabledColor}><Overlay width={520} component={<ListShare list_id={list_id} />}>Share</Overlay></Tag>\n </Space>\n\n </>\n );\n}","import { Button, Modal } from \"antd\";\nimport React from \"react\";\n\nexport default function SalesCount(props) {\n\n const { data = [], title = \"\" } = props;\n if (data.length === 0) { return (<></>); }\n\n\n const drawDetails = () => {\n\n return (\n <>\n <em>\"{title}\"</em>\n <div className=\"shim\" /><div className=\"shim\" />\n {data.map(item => {\n return (<div>{item}</div>)\n })}\n </>\n )\n\n }\n\n return (\n <>\n <Button onClick={() => Modal.info({ maskClosable : true, okText : \"Close\", okButtonProps : {type : \"default\"}, icon: null, title: \"Sales & Marketing companies for:\", content: <>{drawDetails()}</> })} size=\"small\" className=\"mini-btn\" ><small>Sales & Marketing ({data.length}) </small></Button>\n </>\n );\n\n}","import { Button, Typography, Spin, Empty } from \"antd\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { apiCall } from \"../../utils/Api\";\nimport ItemLayouts from \"../ItemLayouts\";\nimport { CloseOutlined } from '@ant-design/icons'\nimport Renderer from \"../Renderer\";\nexport default function SeriesCount(props) {\n\n const { isbn = \"\", drawComponent = () => { }, next = false, series = \"\", series_num = \"\" } = props;\n const [drawn, setDrawn] = useState(false);\n // Fetch next or previous series \n const getSeries = (_next = false) => {\n drawComponent(<DrawTitles titles={{ rows: [] }} next={_next} loading={true} />);\n apiCall((_next) ? \"title/getNextInSeries\" : \"title/getPreviousInSeries\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n drawComponent(<DrawTitles titles={_result} next={_next} loading={false} />);\n }\n });\n }\n\n // Draw results + shift page down\n const DrawTitles = (props) => {\n const { titles = { rows: [] }, next = false, loading = true } = props;\n const myRef = useRef(null);\n\n // Shift down to the placeholder - no sense waiting for results to load...\n useEffect(() => {\n if (loading) { myRef.current.scrollIntoView({ behavior: \"smooth\", block: 'start', inline: 'nearest' }); }\n }, [])\n\n\n \n return (\n <>\n {/* Title and close UI */}\n <div style={{ \"position\": \"relative\", \"top\": \"-174px\" }} ref={myRef} ></div>\n <div className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => drawComponent(null)} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <div style={{ \"padding\": \"8px 20px\", \"paddingBottom\": \"0px\" }}>\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>{(next) ? \"Next in series:\" : \"Previous in series:\"} {series}{series_num}</div>\n </Typography.Title>\n </div>\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n\n {/* Loading animation */}\n {(loading && <>\n <Spin spinning={loading}>\n <div className=\"shim\" style={{ \"height\": \"200px\" }}></div>\n </Spin>\n </>)}\n\n {/* Results */}\n <div>\n {titles.rows.map((item, index) => {\n return (\n <div>\n <Renderer><ItemLayouts display=\"details2\" data={item} index={index} /></Renderer>\n {(index !== (titles.rows.length - 1) && <div className=\"borderBottom shim\" style={{ \"margin\": \"25px -20px\", \"borderBottomWidth\": \"6px\" }} />)}\n </div>\n )\n })}\n </div>\n\n {/* Empty */}\n {((!loading && titles.rows.length === 0) && <>\n <div>\n <Empty description=\"No series found.\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n </>)}\n </>\n )\n }\n\n // Buttons\n return (\n\n <Button size=\"small\" onClick={() => getSeries(next)} className=\"mini-btn\" ><small>{(next) ? \"Next\" : \"Previous\"} in Series</small></Button>\n\n\n )\n\n\n\n\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Cascader, TreeSelect, message } from 'antd';\nimport { apiCall } from \"../../utils/Api\";\n\n\nexport default function BisacSelector(props) {\n\n const { value, size = \"middle\", setValue = () => { }, strToArr, multiple = true } = props;\n const [loading, setLoading] = useState(true);\n const [results, setResults] = useState([])\n\n const markNonBooks = (_arr) => {\n\n return _arr.map(item => {\n if(!item.hasOwnProperty(\"id\")){\n return { ...item, \"label\": item.label + \" (can't select)\", \"selectable\" : false, id : item.label, \"children\": markNonBooks(item.children) }\n }\n if (item.hasOwnProperty(\"id\") && item.id.substr(0, 1) === \"_\") {\n return { ...item, \"label\": item.label + \" (nonbook)\", \"selectable\" : true, \"children\": markNonBooks(item.children) }\n } else {\n return {...item, \"selectable\" : true}\n }\n })\n }\n\n\n // const markNonBooks = (_arr) => {\n // return _arr.map(item => {\n // if (item.id.substr(0, 1) === \"_\") {\n // if (item.hasOwnProperty(\"children\")) {\n // return { ...item, \"label\": item.label + \" (nonbook)\", \"children\": markNonBooks(item.children) }\n // } else {\n // return { ...item, \"label\": item.label + \" (nonbook)\" }\n // }\n // } else {\n // return item;\n // }\n // })\n // }\n\n\n const getBisacs = () => {\n\n apiCall(\"title/getBisacs\", {}, (_status, _result) => {\n if (_status) {\n setResults(markNonBooks(_result));\n setLoading(false);\n }\n })\n }\n\n useEffect(getBisacs, []);\n\n\n\n\n\n const onChange = (_v) => {\n console.log(_v);\n }\n\n const loadData = selectedOptions => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n\n }\n\n\n\n const getOptions = (_results) => {\n\n return _results.map((item, index) => {\n return {\n value: item.id,\n key: item.id,\n title: (<div>{item.label} <small> - <em>({item.id})</em></small></div>),\n selectable : item.selectable,\n children: getOptions(item.children)\n }\n })\n }\n\n\n return (\n <>\n <TreeSelect size={size} style={{ \"width\": \"100%\", \"fontSize\": (size === \"small\") ? \"12px\" : \"14px\" }} multiple={multiple} loading={loading} onChange={(e) => {if(e.length <= 3){ setValue(e);} else {message.warn(\"Max 3 Bisacs\")} }} value={(value) ? strToArr(value) : undefined} showSearch placeholder={(loading) ? \"Loading...\" : \"Select Bisac\"} treeData={getOptions(results)} />\n </>\n );\n}","import { Spin, Empty } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport Html from \"../../utils/Html\";\nimport moment from \"moment\";\nimport {parseRank, parseSubjectsList} from \"../../utils/Utils\";\n\nexport default function TitleField(props) {\n\n const { isbn = \"\", field = \"\", data = {} } = props;\n const [result, setResult] = useState({});\n const [loading, setLoading] = useState(false);\n const [empty, setEmpty] = useState(false);\n\n const drawProductDetails = (_data) => {\n\n let\n {\n rank = {\n bestseller: null,\n },\n binding = \"\",\n release_date = null,\n is_forthcoming = false,\n height = null,\n width = null,\n pages = null,\n publisher = \"\",\n audience = null,\n edition_type = null,\n series = \"\",\n series_num = \"\",\n weight = null,\n carton_qty = null,\n subjects = [],\n language = \"\",\n\n } = _data;\n\n\n return (\n <div className=\"summary-box\">\n <conditional.true value={(binding)}>\n <div key=\"0\"><strong>Binding </strong><span>{binding}</span></div>\n </conditional.true>\n <conditional.true value={(pages)}>\n <div key=\"1\"><strong>Pages: </strong> <span>{pages}</span></div>\n </conditional.true>\n <conditional.true value={(series)}>\n <div key=\"2\"><strong>Series: </strong><span>{series}</span></div>\n </conditional.true>\n <conditional.true value={(series_num)}>\n <div key=\"2_series_number\"><strong>Series Number: </strong> <span>series_num</span></div>\n </conditional.true>\n <conditional.true value={(edition_type)}>\n <div key=\"2_edition_type\"><strong>Edition Type: </strong><span>{edition_type}</span></div>\n </conditional.true>\n <conditional.true value={(publisher)}>\n <div key=\"3\"><strong>Publisher: </strong> <span>{publisher}</span> </div>\n </conditional.true>\n <conditional.true value={(language)}>\n <div key=\"12\"><strong>Language: </strong> <span>{language}</span> </div>\n </conditional.true>\n <conditional.true value={(release_date)}>\n <div key=\"4\"><strong>{(is_forthcoming) ? \"Releases:\" : \"Published:\"} </strong> <span>{(release_date) ? moment(release_date * 1000).format(\"MMMM D, YYYY\") : \"\"}</span> </div>\n </conditional.true>\n <conditional.true value={(audience)}>\n <div key=\"5\"><strong>Audience: </strong> {audience} </div>\n </conditional.true>\n <conditional.true value={(subjects.length > 0)}>\n <div key=\"6\"><strong>Subjects: </strong><span style={{ \"display\": \"inline\", \"padding\": \"10px 0px\" }}>{parseSubjectsList(subjects)}</span></div>\n </conditional.true>\n <conditional.true value={(isbn)}>\n <div key=\"7\"><strong>EAN: </strong> <span>{isbn}</span> </div>\n </conditional.true>\n <conditional.true value={(width && height)}>\n <div key=\"8\"><strong>Physical Dimensions: </strong> <span>{width}\" x {height}\"</span> </div>\n </conditional.true>\n <conditional.true value={(weight)}>\n <div key=\"9\"><strong>Shipping Weight: </strong> <span>{(weight) ? weight.toString() + \"lbs.\" : \"\"}</span></div>\n </conditional.true>\n <conditional.true value={(carton_qty)}>\n <div key=\"10\"><strong>Carton Quantity: </strong> <span>{(carton_qty) ? carton_qty.toString() : \"\"}</span></div>\n </conditional.true>\n <conditional.true value={(rank.bestseller)}>\n <div key=\"11\"> <strong>Sales Rank: </strong> {parseRank(rank)} </div>\n </conditional.true>\n </div>\n )\n }\n\n const parseReviews = (_reviews) => {\n if (!_reviews || _reviews.length === 0) {\n return (\"\");\n }\n return _reviews.map((_review, index) => {\n return (<span key={index}><Html html={_review.content} /></span>);\n });\n }\n\n\n\n const draw = (_res) => {\n\n\n if(field === \"\"){\n return drawProductDetails(_res);\n }\n\n if (!_res.hasOwnProperty(field)) {\n return <></> //<Empty imageStyle={{ height: 20}} className=\"small-empty\" image={Empty.PRESENTED_IMAGE_SIMPLE} />;\n }\n let _arr = _res[field];\n\n if (!_arr || _arr.length === 0) {\n return <></> //<Empty imageStyle={{ height: 20}} className=\"small-empty\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n }\n\n if(field === \"reviews\"){\n return parseReviews(_arr);\n }\n\n if (field === \"description\") {\n return (<Html key=\"description\" html={_arr} />);\n }\n\n if (field === \"marketing\") {\n let inc = 0;\n\n \n \n let _ret = Object.keys(_arr).map(_key => {\n if (_key === \"extras\") {\n\n return Object.keys(_arr[_key]).map(_k => {\n \n \n return _arr[_key][_k].map((_itm, index) => {\n if(_itm){\n inc++; \n }\n if(_itm.hasOwnProperty(\"url\") && _itm.hasOwnProperty(\"desc\")){\n return <a target={\"_blank\"} href={_itm.url}>{_itm.desc}</a>\n }\n return (<Html key={index} html={_itm} />);\n });\n })\n } else {\n return _arr[_key].map((_itm, index) => {\n if(_itm){\n inc++; \n }\n return (<Html key={index} html={_itm} />);\n });\n }\n })\n\n if(inc>0){\n return _ret;\n } else {\n return <></>// <Empty imageStyle={{ height: 20}} className=\"small-empty\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n }\n }\n\n return _arr.map((_itm, index) => {\n return (<Html key={index} html={_itm} />);\n });\n }\n\n\n\n const getItemField = () => {\n setLoading(true);\n let _field = field;\n\n if(field === \"reviews\"){\n _field = \"\";\n }\n apiCall(\"title/getItem\", { isbn: isbn, want_keys_csv: _field }, (_status, _result) => {\n\n if(_status){\n setResult(_result)\n } else {\n setResult(data);\n }\n \n setLoading(false);\n })\n }\n\n useEffect(getItemField, [field])\n\n return (\n <Spin spinning={(loading)} >\n <div style={{ \"fontSize\": \"12px\" }}>\n {draw(result)}\n </div>\n <div className=\"shim\" />\n </Spin>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Col, Collapse, Divider, Row } from \"antd\";\nimport { PlusOutlined, MinusOutlined, EditOutlined } from '@ant-design/icons';\nimport Comments from \"./Comments\";\nimport Html from \"../utils/Html\";\nimport TitleField from \"./title/TitleField\";\nimport { ucfirst } from \"../utils/Utils\";\nimport Comment from \"./Comment\";\nexport default function SupplementaryInfo(props) {\n\n const { opened = [], isbn = \"\", data = {} } = props;\n\n const drawContent = (_key) => {\n\n switch (_key) {\n case \"comments\":\n\n\n return <Comments row isbn={data.isbn || isbn} />\n \n\n case \"description\":\n return (\n <Row>\n <Col flex={\"70px\"}><small>Description</small></Col>\n <Col flex={\"500px\"}>\n <TitleField isbn={data.isbn || isbn} field=\"description\" />\n </Col>\n </Row>)\n\n\n case \"author\":\n return (<Row>\n <Col flex={\"70px\"}><small>Author</small></Col>\n <Col flex={\"500px\"}>\n <TitleField isbn={data.isbn || isbn} field=\"bio\" />\n </Col>\n </Row>)\n\n\n case \"reviews\":\n return (<Row>\n <Col flex={\"70px\"}><small>Reviews</small></Col>\n <Col flex={\"500px\"}>\n <TitleField isbn={data.isbn || isbn} field=\"reviews\" />\n </Col>\n </Row>)\n\n\n case \"marketing\":\n return (<Row>\n <Col flex={\"70px\"}><small>Marketing (for internal use)</small></Col>\n <Col flex={\"500px\"}>\n <TitleField isbn={data.isbn || isbn} field=\"marketing\" />\n </Col>\n </Row >)\n\n\n }\n\n }\n\n\n\n const draw = () => {\n return opened.map((item, index) => {\n return drawContent(item);\n })\n }\n\n return (\n <>\n <div className=\"shim\" /><div className=\"shim\" />\n {draw()}\n </>\n )\n\n}","import { Button, Modal, Typography, Divider, Space } from \"antd\";\nimport React, { useState } from \"react\";\n\nexport default function Resources(props) {\n\n const { data = [] } = props;\n const [visible, setVisible] = useState();\n\n const drawModal = () => {\n\n return (\n <Modal destroyOnClose={true} onCancel={() => setVisible(false)} footer={null} visible={visible}>\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>Digital Resources ({data.length})</div>\n <Divider dashed style={{ \"marginTop\": \"10px\", \"marginBottom\": \"5px\" }} />\n </Typography.Title>\n <Space direction=\"vertical\">\n {data.map(item => {\n return(<a key={item.url} target={\"_blank\"} href={item.url}>{item.name}</a>)\n })}\n </Space>\n \n </Modal>\n )\n }\n\n if (data.length < 1) {\n return (<></>);\n }\n\n return (\n <>\n {drawModal()}\n <Button onClick={() => setVisible(true)} size=\"small\" className=\"mini-btn\" ><small>Digital Resources ({data.length}) </small></Button>\n </>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Popover, Button, Table, Badge, Input, Form, Select, Divider, DatePicker, AutoComplete, Tabs } from \"antd\";\nimport { ucfirst } from \"../../utils/Utils\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport { apiCall } from \"../../utils/Api\";\nimport BisacSelector from \"./BisacSelector\";\nimport Editor from \"react-medium-editor\";\nimport { countries } from \"../../data\";\nexport default function TitleRenderers(props) {\n\n const { value, setValue, field, edit, valid, can_use_pick, isbn } = props;\n\n const [picklist, setPicklist] = useState([]);\n const [searchResults, setSearchResults] = useState([])\n const getPicklist = (_field) => {\n\n\n if (!can_use_pick) {\n return false;\n }\n\n\n apiCall(\"title/getPickList\", { isbn: isbn, field: field }, (_status, _result) => {\n if (_status) {\n setPicklist(_result);\n setSearchResults(_result.map((item => {\n return { value: item.text, label: <>{item.text} <small>({item.count})</small></> }\n })))\n }\n })\n }\n\n useEffect(getPicklist, [])\n\n\n const onSearch = (value) => {\n setSearchResults(picklist.filter(item => (value.length > 0) ? item.text.toLowerCase().substr(0, value.length) === value.toLowerCase() : (item.text)).map((item => {\n return { value: item.text, label: <>{item.text} <small>({item.count})</small></> }\n })))\n };\n\n const drawRenderer = function () {\n\n switch (field) {\n\n case \"title\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }}>Add a colon ( : ) to separate the title from the subtitle</small>} label={ucfirst(field)}>\n <Input value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n\n case \"author\":\n case \"author2\":\n case \"author3\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={\"Author\"}>\n <Input value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter Author\"} />\n </Form.Item>\n </Form>\n </>\n )\n\n case \"bisac_subjects\":\n\n\n return (\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={ucfirst(field).replace(\"_\", \" \")}>\n <BisacSelector strToArr={strToArr} value={value} setValue={setValue} />\n </Form.Item>\n </Form>\n );\n\n case \"language\":\n return (\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }}>Select a country.</small>} label={ucfirst(field)}>\n {/* <AutoComplete\n onSearch={onSearch}\n placeholder={\"Select or type \" + field}\n options={countries}\n onChange={(e) => setValue(e)} value={(value) ? value : undefined}>\n </AutoComplete> */}\n\n {languageSelect()}\n </Form.Item>\n </Form>\n\n )\n case \"series\":\n return (\n <>\n <conditional.true value={(can_use_pick)} >\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }} >Select or type a series.</small>} label={ucfirst(field)}>\n <AutoComplete\n onSearch={onSearch}\n placeholder={\"Select or type \" + field}\n options={searchResults}\n onChange={(e) => setValue(e)} value={(value) ? value : undefined}>\n </AutoComplete>\n </Form.Item>\n </Form>\n </conditional.true>\n\n <conditional.true value={(!can_use_pick)} >\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={ucfirst(field)}>\n <Input value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Form>\n </conditional.true>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"publisher\":\n return (\n <>\n <conditional.true value={(can_use_pick)} >\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }} >Select or type a publisher.</small>} label={ucfirst(field)}>\n <AutoComplete\n onSearch={onSearch}\n placeholder={\"Select or type \" + field}\n options={searchResults}\n onChange={(e) => setValue(e)} value={(value) ? value : undefined}>\n </AutoComplete>\n </Form.Item>\n </Form>\n </conditional.true>\n\n <conditional.true value={(!can_use_pick)} >\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={ucfirst(field)}>\n <Input value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Form>\n </conditional.true>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"binding\":\n return (\n <>\n <Form layout=\"vertical\">\n <Form.Item label={ucfirst(field)}>\n {bindingsSelect()}\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n case \"stat\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={\"Status\"}>\n {statusSelect()}\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"audience_code\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={\"Status\"}>\n {codeSelect()}\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"edition_type\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={\"Edition type\"}>\n {editionSelect()}\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"audience_type\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={\"Status\"}>\n {typeSelect()}\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"pubdate\":\n case \"pubdate_us\":\n return (\n <>\n <Form layout=\"vertical\">\n <Form.Item label={ucfirst(field)}>\n <DatePicker style={{ \"width\": \"200px\" }}\n allowClear={false}\n format=\"MMMM Do, YYYY\"\n value={(value) ? moment(value) : moment()}\n onChange={(e) => setValue(e.format(\"YYYY-MM-DD\"))}\n placeholder={\"Enter publish date\"} />\n {/* <Input value={value} onChange={(e) => setValue(e.target.value)} /> */}\n </Form.Item>\n </Form>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <div className=\"shim\"></div>\n </>\n )\n\n case \"weight\":\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }}>in lbs. Grams will convert, e.g. 30g</small>} label={ucfirst(field)}>\n <Input value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Form>\n </>\n )\n\n case \"depth\":\n case \"height\":\n case \"width\":\n return (\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }}>in inches</small>} label={ucfirst(field)}>\n <Input type=\"number\" value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Form>\n )\n\n case \"sales_rights_exclude\":\n\n // Removed by kellynda's request #1131\n return(<></>)\n // return (\n // <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n // <Form.Item label={ucfirst(field)}>\n // {statusSalesRights()}\n // </Form.Item>\n // </Form>\n // )\n\n\n case \"pages\":\n case \"series_number\":\n case \"edition_number\":\n case \"audience_min\":\n case \"audience_max\":\n return (\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n <Form.Item label={ucfirst(field)}>\n <Input type=\"number\" value={value} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Form>\n )\n\n\n default:\n return (\n <>\n <Form className={(!valid && (!value)) ? \"ant-form-item-has-error\" : \"\"} layout=\"vertical\">\n\n \n <Tabs size=\"small\" className=\"itemTabs\" type=\"card\">\n <Tabs.TabPane tab={<small>Text</small>} key=\"item-1\">\n <div className=\"ant-input\" style={{ \"padding\": \"10px\", \"borderRadius\": \"2px\", \"minHeight\": \"150px\", \"maxHeight\": \"150px\", \"overflow\": \"scroll\" }}>\n <Editor\n tag=\"p\"\n forcePlainText={true}\n text={value}\n onChange={(e) => setValue(e)}\n options={{ toolbar: { buttons: ['bold', 'italic', 'underline', 'anchor'] } }}\n />\n \n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div style={{\"height\" : \"3px\"}} className=\"shim\" />\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>HTML</small>} key=\"item-2\">\n <Form.Item>\n <Input.TextArea style={{\"minHeight\": \"150px\", \"maxHeight\": \"150px\", resize: 'none'}} value={value} rows={5} onChange={(e) => setValue(e.target.value)} placeholder={\"Enter \" + field} />\n </Form.Item>\n </Tabs.TabPane>\n </Tabs>\n\n\n\n\n\n\n </Form>\n </>\n )\n\n }\n\n }\n\n\n const strToArr = (_v) => {\n\n if (Array.isArray(_v)) {\n return _v;\n } else {\n if (_v) {\n return _v.split(\",\")\n } else {\n return _v;\n }\n\n }\n }\n\n\n\n const languageSelect = () => {\n\n return (\n <>\n <Select mode=\"multiple\" placeholder=\"Select code\" onChange={(e) => setValue(e)} value={(value) ? strToArr(value) : undefined} >\n {countries.map((item, index) => {\n return (<Select.Option key={index} value={item.value}>{item.label}</Select.Option>)\n })}\n </Select>\n </>\n )\n }\n\n\n const codeSelect = () => {\n\n return (\n <>\n <Select mode=\"multiple\" placeholder=\"Select code\" onChange={(e) => setValue(e)} value={(value) ? strToArr(value) : undefined} >\n <Select.Option value=\"02\" >02 Children</Select.Option>\n <Select.Option value=\"03\" >03 Young Adult</Select.Option>\n </Select>\n </>\n )\n }\n\n\n const editionSelect = () => {\n\n return (\n <Select placeholder=\"Select type\" onChange={(e) => setValue(e)} value={(value) ? value : undefined} >\n <Select.Option value=\"ABR\" >ABR Abridged</Select.Option>\n <Select.Option value=\"ILL\">ILL Illustrated</Select.Option>\n <Select.Option value=\"LTE\">LTE Large type / large print</Select.Option>\n <Select.Option value=\"REV\">REV Revised</Select.Option>\n <Select.Option value=\"SPE\">SPE Special edition</Select.Option>\n <Select.Option value=\"UBR\">UBR Unabridged</Select.Option>\n <Select.Option value=\"ULP\">ULP Ultra large print</Select.Option>\n\n </Select>\n )\n }\n\n\n const typeSelect = () => {\n\n return (\n <Select placeholder=\"Select type\" onChange={(e) => setValue(e)} value={(value) ? value : undefined} >\n <Select.Option value=\"A\" >A Age</Select.Option>\n <Select.Option value=\"G\" >G Grade</Select.Option>\n </Select>\n )\n }\n\n\n const statusSalesRights = () => {\n\n return (\n <Select mode=\"multiple\" placeholder=\"Select\" onChange={(e) => setValue(e)} value={(value) ? strToArr(value) : undefined} >\n <Select.Option value=\"US\" >US United States</Select.Option>\n <Select.Option value=\"UK\" >UK United Kingdom</Select.Option>\n <Select.Option value=\"CA\" >CA Canada</Select.Option>\n </Select>\n )\n }\n\n\n\n const statusSelect = () => {\n\n return (\n <Select placeholder=\"Select status\" onChange={(e) => setValue(e)} value={(value) ? value : undefined} >\n <Select.Option value=\"OP\" >OP Out of Print</Select.Option>\n <Select.Option value=\"OSI\" >OSI Out of Stock Indefinitely</Select.Option>\n <Select.Option value=\"PC\" >PC Publication Cancelled</Select.Option>\n <Select.Option value=\"PP\" >PP Postponed</Select.Option>\n </Select>\n )\n }\n\n const bindingsSelect = () => {\n\n return (\n <Select placeholder=\"Select binding\" onChange={(e) => setValue(e)} value={(value) ? value : undefined} >\n <Select.Option value=\"HC\" >HC Hardcover</Select.Option>\n <Select.Option value=\"PB\">PB Paperback</Select.Option>\n <Select.Option value=\"TP\">TP Paperback</Select.Option>\n <Select.Option value=\"DS\">DS 1.2M, 5.25 Disk</Select.Option>\n <Select.Option value=\"AU\">AU Audio</Select.Option>\n <Select.Option value=\"AA\">AA Audio</Select.Option>\n <Select.Option value=\"AC\">AC Audio Cassette</Select.Option>\n <Select.Option value=\"CD\">CD Audio CD</Select.Option>\n <Select.Option value=\"AD\">AD Audio CD</Select.Option>\n <Select.Option value=\"CM\">CM Audio CD (MP3)</Select.Option>\n <Select.Option value=\"BA\">BA Bath Book</Select.Option>\n <Select.Option value=\"BR\">BR Blu-ray</Select.Option>\n <Select.Option value=\"BG\">BG Board Game</Select.Option>\n <Select.Option value=\"BB\">BB Boardbook</Select.Option>\n <Select.Option value=\"BD\">BD Boardbook</Select.Option>\n <Select.Option value=\"BK\">BK Book</Select.Option>\n <Select.Option value=\"BM\">BM Bookmark</Select.Option>\n <Select.Option value=\"BX\">BX Box or Slipcased</Select.Option>\n <Select.Option value=\"CA\">CA Calendar</Select.Option>\n <Select.Option value=\"CS\">CS Cards</Select.Option>\n <Select.Option value=\"CR\">CR CD-ROM</Select.Option>\n <Select.Option value=\"CL\">CL Cloth Book</Select.Option>\n <Select.Option value=\"CG\">CG Clothing</Select.Option>\n <Select.Option value=\"CB\">CB Comb Bound</Select.Option>\n <Select.Option value=\"DY\">DY Display</Select.Option>\n <Select.Option value=\"DO\">DO Doll</Select.Option>\n <Select.Option value=\"DV\">DV DVD</Select.Option>\n <Select.Option value=\"EB\">EB E-Book</Select.Option>\n <Select.Option value=\"GM\">GM Game</Select.Option>\n <Select.Option value=\"GC\">GC Greeting Card</Select.Option>\n <Select.Option value=\"TC\">TC Hardcover</Select.Option>\n <Select.Option value=\"CT\">CT Hardcover</Select.Option>\n <Select.Option value=\"IL\">IL Imitation Leather</Select.Option>\n <Select.Option value=\"LP\">LP Large Print</Select.Option>\n <Select.Option value=\"LT\">LT Leather/Fine Binding</Select.Option>\n <Select.Option value=\"LB\">LB Library Binding</Select.Option>\n <Select.Option value=\"LL\">LL Loose-Leaf</Select.Option>\n <Select.Option value=\"MU\">MU Mug</Select.Option>\n <Select.Option value=\"OA\">OA Otabind</Select.Option>\n <Select.Option value=\"OT\">OT Other</Select.Option>\n <Select.Option value=\"PA\">PA Paperback</Select.Option>\n <Select.Option value=\"MM\">MM Paperback</Select.Option>\n <Select.Option value=\"SC\">SC Paperback</Select.Option>\n <Select.Option value=\"PT\">PT Paperback</Select.Option>\n <Select.Option value=\"PO\">PO Pop Up</Select.Option>\n <Select.Option value=\"PU\">PU Puzzle</Select.Option>\n <Select.Option value=\"RB\">RB Ring Bound</Select.Option>\n <Select.Option value=\"SE\">SE Set</Select.Option>\n <Select.Option value=\"MP\">MP Sheetmap</Select.Option>\n <Select.Option value=\"SW\">SW Software</Select.Option>\n <Select.Option value=\"SP\">SP Spiral Bound</Select.Option>\n <Select.Option value=\"ST\">ST Stapled</Select.Option>\n <Select.Option value=\"TA\">TA Tableware</Select.Option>\n <Select.Option value=\"TO\">TO Tote bag</Select.Option>\n <Select.Option value=\"TY\">TY Toy</Select.Option>\n <Select.Option value=\"XA\">XA Trade Material</Select.Option>\n <Select.Option value=\"TR\">TR Transparencies</Select.Option>\n <Select.Option value=\"VH\">VH VHS Video</Select.Option>\n <Select.Option value=\"VD\">VD Video</Select.Option>\n <Select.Option value=\"VB\">VB Vinyl Bound</Select.Option>\n <Select.Option value=\"VP\">VP Vinyl Paperback</Select.Option>\n </Select>\n\n )\n\n\n\n }\n\n\n\n\n return drawRenderer();\n\n}","import React, { useState } from \"react\";\nimport { Popover, Button, Table, Badge, Input, Form, Space, message } from \"antd\";\nimport { EditOutlined, StarFilled, FormOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport { ucfirst } from \"../../utils/Utils\";\nimport moment from \"moment\";\nimport TitleRenderers from \"./TitleRenderers\";\nimport conditional from \"../../tools/conditional\";\nimport BisacSelector from \"./BisacSelector\";\nimport Modal from \"antd/lib/modal/Modal\";\nexport default function TitleEditField(props) {\n\n const { editing, field, isbn, annotation = false, edit = {} } = props;\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState({ rows: [], type: \"\", can_use_pick: false });\n const [value, setValue] = useState(\"\");\n const [visible, setVisible] = useState(false);\n const [row, setRow] = useState(null);\n const [valid, setValid] = useState(true);\n const [type, setType] = useState(\"title_heap\");\n const [title, setTitle] = useState(\"Edit\");\n\n\n // title heap\n // annotaton heap\n // \n\n const close = () => {\n\n setVisible(false);\n setValid(true);\n setRow(null);\n }\n\n const addRowKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = item.row_id;\n return item;\n }))\n }\n\n\n const getEdit = (_visible, _title = \"Edit\") => {\n if (visible) {\n close();\n return;\n }\n setTitle(_title);\n setValue(\"\");\n setLoading(true);\n\n let _obj = {}\n _obj.isbn = isbn;\n _obj.field = field;\n\n\n switch(_obj.field){\n\n case \"main_description\":\n _obj.field = \"annotation_1\"\n break; \n\n case \"short_description\":\n _obj.field = \"annotation_2\"\n break; \n\n case \"long_description\":\n _obj.field = \"annotation_3\"\n break; \n\n case \"review_quote\":\n _obj.field = \"annotation_8\"\n break; \n\n case \"reader_description\":\n _obj.field = \"annotation_12\"\n break; \n\n case \"biographical_note\":\n _obj.field = \"annotation_13\"\n break; \n\n \n\n \n }\n\n\n // overwrite field with id if it's an annotation\n if (annotation) {\n _obj.field = \"annotation_\" + annotation.id.toString();\n }\n\n if (_visible) {\n\n console.log(_obj);\n \n apiCall(\"title/getSpecificEdit\", _obj, (_status, _result) => {\n\n if (_status) {\n addRowKeys(_result.rows)\n setType(_result.type);\n setData(_result);\n setVisible(true);\n setLoading(false);\n } else {\n message.error(\"Not available.\")\n }\n\n\n })\n }\n }\n\n\n const saveEdit = () => {\n\n if (!value) {\n setValid(false);\n return;\n }\n\n let obj = {}\n\n obj.value = value;\n obj.isbn = isbn;\n\n\n if (annotation) {\n\n\n obj.note_id = annotation.id;\n obj.field = field;\n\n if (row) {\n obj.row_id = row;\n }\n\n apiCall(\"title/saveAnnotation\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Update requested\");\n } else {\n message.error(_result.error);\n }\n close()\n })\n\n } else {\n\n obj.type = type;\n obj.field = field;\n\n if (row) {\n obj.row = row;\n }\n\n apiCall(\"title/save\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Update requested\");\n } else {\n message.error(_result.error)\n }\n close()\n })\n\n }\n\n\n }\n\n const deleteEdit = () => {\n\n let obj = {}\n obj.type = type;\n obj.isbn = isbn;\n\n\n if (annotation) {\n\n if (row) {\n obj.row_id = row;\n }\n obj.note_id = annotation.id;\n\n apiCall(\"title/deleteAnnotation\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Record deleted\");\n } else {\n message.error(_result.error)\n }\n close()\n })\n\n } else {\n\n obj.field = field;\n if (row) {\n obj.row = row;\n }\n\n apiCall(\"title/delete\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Record deleted\");\n } else {\n message.error(_result.error)\n }\n close()\n })\n\n }\n\n\n }\n\n\n\n\n const columns = [\n {\n title: <small></small>, width: \"20px\", style: { \"padding\": \"0px\" }, dataIndex: 'fs', key: 'fs', render: (e, f) => {\n return (<Badge style={{ \"paddingLeft\": \"12px\" }} color={(f.is_editable) ? \"#87ceeb\" : \"#d3d3d3\"} />)\n }\n },\n {\n title: <small>Value</small>, dataIndex: 'data', key: 'data', render: (e) => {\n return (e) ? <div>\n {e}\n </div> : \"\";\n }\n },\n { title: <small>Source</small>, dataIndex: 'source_display', key: 'source_display' },\n {\n title: <small>Created</small>, dataIndex: 'date_created', key: 'date_created', render: (e) => {\n return (e) ? <span>{moment(e * 1000).format(\"MMM Do, YYYY\")}</span> : \"\";\n }\n },\n {\n title: <small>Modified</small>, dataIndex: 'date_changed', key: 'date_changed', render: (e) => {\n return (e) ? <span>{moment(e * 1000).format(\"MMM Do, YYYY\")}</span> : \"\";\n }\n },\n { title: <small></small>, width: \"0x\", style: { \"padding\": \"0px\" }, dataIndex: 'bs', key: 'bs' },\n { title: <small>Priority</small>, dataIndex: 'title_weight', key: 'title_weight' },\n { title: <small></small>, width: \"0x\", style: { \"padding\": \"0px\" }, dataIndex: 'bs', key: 'bs' },\n ]\n\n // \"title_weight\": 1001,\n // \"data\": \"I Love Corgis! : this is the subtitle by bookmanager\",\n // \"source_display\": \"\",\n // \"date_created\": 1628183900,\n // \"date_changed\": 1628183900,\n // \"row_id\": 76076143,\n // \"isbn\": \"ATEST00000000\",\n // \"eisbn\": \"Ryan_Y-Z0UVpa4PqhAdL4w\",\n // \"banned_bisacs\": null,\n // \"is_editable\": false\n\n\n\n\n const onRowClick = (_record) => {\n\n if (_record.is_editable) {\n\n if (row === _record.row_id) {\n setRow(null);\n } else {\n setRow(_record.row_id);\n }\n\n } else {\n setRow(null);\n }\n setValue(_record.data);\n }\n\n\n const drawEditForm = () => {\n\n return (\n <Modal title={title} width={1000} onCancel={() => setVisible(false)} footer={null} visible={visible}>\n <div style={{ \"margin\": \"-12px -16px\" }}>\n <conditional.true value={data.rows.length > 0}>\n <Table\n size=\"small\"\n rowClassName={(record) => { return (record.row_id === row) ? \"ant-table-row-selected\" : \"\" }}\n loading={loading}\n columns={columns}\n dataSource={data.rows}\n pagination={false}\n onRow={(record, rowIndex) => {\n return {\n onClick: event => { onRowClick(record) }, // click row\n };\n }}\n />\n </conditional.true>\n <div className=\"shim\"></div>\n <div style={{ \"padding\": \"10px 20px\" }}>\n\n <TitleRenderers isbn={isbn} can_use_pick={data.can_use_pick} valid={valid} edit={edit} value={value} setValue={setValue} field={field} />\n\n\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button size=\"small\" onClick={() => close()} ><small>Cancel</small></Button>\n <conditional.true value={(row)}>\n <Button danger size=\"small\" onClick={() => deleteEdit()} ><small>Delete</small></Button>\n </conditional.true>\n\n <Button size=\"small\" onClick={() => saveEdit()} type=\"primary\"><small>{(row) ? \"Update\" : \"Save Changes\"}</small></Button>\n </Space>\n </div>\n <br clear=\"all\" />\n <div className=\"shim\"></div>\n </div>\n </div>\n </Modal>\n )\n }\n\n if (!editing) {\n return props.children;\n }\n\n\n\n // return (\n // <>\n // {props.children}\n // {drawEditForm()}\n // <Button onClick={() => getEdit(true)} size=\"small\"><small>hi</small></Button>\n // </>\n // )\n\n\n return (\n <>\n\n {props.children}\n {drawEditForm()}\n <conditional.true value={(!props.children)}>\n <conditional.true value={(!edit[field]) && (!annotation)}>\n <span className=\"c\" style={{ \"opacity\": \"0.5\" }}>[ {field} ]</span>\n </conditional.true>\n <conditional.true value={(edit[field])}>\n {edit[field]}\n </conditional.true>\n\n </conditional.true>\n <a onClick={() => getEdit(true, \"Edit \" + ucfirst(field.replace(\"_\", \" \")))} > {(annotation) ? <small>{\"Edit \" + ucfirst(field.replace(\"_\", \" \")) + \" \"}</small> : <> </>}<FormOutlined style={{ \"fontSize\": \"11px\", \"lineHeight\": \"0px\" }} /></a>\n \n </>);\n}","import React, { useState } from \"react\";\nimport { Popover, Image, Upload, Modal, Table, Badge, Input, Form, Space, message, Spin, Button, Popconfirm } from \"antd\";\nimport nocover from \"../../media/no-cover.png\"\nimport { apiCall } from \"../../utils/Api\";\nimport { UploadOutlined, GlobalOutlined, DeleteOutlined } from '@ant-design/icons';\nexport default function CoverImage(props) {\n\n\n const { isbn, eisbn, editing=false, cache=\"\" } = props;\n const [visible, setVisible] = useState(false);\n const [uploading, setUploading] = useState(false);\n const [valid, setValid] = useState(true);\n\n\n \n\n const open = () =>{\n setValid(true);\n setVisible(true);\n }\n\n const deleteImage = () =>{\n\n apiCall(\"title/deleteCoverImage\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n setVisible(false);\n message.success(\"Cover image delete requested.\");\n } else {\n message.error(_result.error);\n }\n setUploading(false);\n });\n\n }\n\n const uploadFile = (_file) => {\n setUploading(true);\n apiCall(\"title/uploadCoverImage\", { file: _file.file, isbn: isbn }, (_status, _result) => {\n if (_status) {\n message.success(\"Cover image update requested.\");\n } else {\n message.error(_result.error)\n }\n setUploading(false);\n });\n }\n\n \n const copyFileFromUrl = (_f) => {\n\n apiCall(\"title/uploadCoverImageByUrl\", { url: _f[\"url\"], isbn: isbn }, (_status, _result) => {\n if (_status) {\n setVisible(false);\n message.success(\"Cover image update requested.\");\n } else {\n setValid(false);\n }\n setUploading(false);\n });\n\n }\n\n\n const drawEdit = () => {\n\n\n if (uploading) {\n return (<Spin />)\n }\n\n return (\n <>\n <Space direction=\"vertical\" size={15}>\n <Upload customRequest={(e) => uploadFile(e)} accept=\".jpg, .jpeg, .png\" >\n <span style={{ \"color\": \"#fff\" }}><UploadOutlined /> <small>Upload</small></span>\n </Upload>\n \n <Modal destroyOnClose footer={null} closeIcon={<></>} visible={visible}>\n <Form className={(!valid) ? \"ant-form-item-has-error\" : \"\"} onFinish={(_f) => copyFileFromUrl(_f)} layout=\"vertical\">\n <Form.Item help={<small style={{color : (!valid) ? \"#ff4d4f\" : \"#AAA\"}}>Use a direct link to image</small>} rules={[{required : true}]} name=\"url\" label=\"Image URL\">\n <Input type=\"url\" placeholder=\"Image URL\" />\n </Form.Item>\n\n <span style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setVisible(false)}>Cancel</Button><Button htmlType=\"submit\" type=\"primary\">Copy</Button>\n </Space>\n </span>\n <br clear=\"all\" />\n </Form>\n </Modal>\n <span onClick={() => open()} style={{ \"color\": \"#fff\" }}><GlobalOutlined /> <small>URL</small></span>\n \n \n <span onClick={() => Modal.confirm({onOk : () => deleteImage(), content : \"Are you sure you wish to delete this image?\"})} style={{ \"color\": \"#fff\" }}><DeleteOutlined /> <small>Remove</small></span>\n \n </Space>\n </>\n )\n }\n\n\n\n return (\n <>\n <Image className=\"shadow-large\" preview={{ visible: false, mask: (editing) ? drawEdit() : false }} onError={(e) => e.target.src=\"/no-cover.png\"} placeholder={\"\"} src={\"https://cdn1.bookmanager.com/mosaic/i/m?b=\" + eisbn + cache} />\n </>\n )\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Row, Col, Card, Space, Typography, Tabs, Divider, Button, Spin } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\n\nimport Peek from \"../Peek\";\nimport Comments from \"../Comments\";\nimport nocover from \"../../media/no-cover.png\"\nimport TitleEditField from \"./TitleEditField\";\nimport conditional from \"../../tools/conditional\";\nimport { parseAuthors, parseSubjects, parseRank, parseSubjectsList, parseSubjectsBisacs } from \"../../utils/Utils\";\nimport Html from \"../../utils/Html\";\nimport moment from \"moment\";\nimport BisacSelector from \"./BisacSelector\";\nimport { EditOutlined, ReloadOutlined, CloseOutlined } from '@ant-design/icons';\nimport CoverImage from \"./CoverImage\";\nimport { cacheBuster } from \"../../utils/Utils\";\n// Variants\nexport default function TitleDetails(props) {\n\n const { isbn, drawComponent = () => { }, close = false } = props;\n const [results, setResults] = useState({});\n const [loading, setLoading] = useState(true);\n const [editing, setEditing] = useState(true);\n const [edit, setEdit] = useState({ annotation_data: [] })\n const [cache, setCache] = useState(cacheBuster());\n const\n {\n authors = [],\n price = null,\n rank = {\n bestseller: null,\n },\n binding = \"\",\n release_date = null,\n is_forthcoming = false,\n available = [],\n canadian = false,\n title = \"\",\n subtitle = \"\",\n eisbn = \"\",\n height = null,\n width = null,\n pages = null,\n publisher = \"\",\n has_libro_audiobook = true,\n audience = null,\n edition = \"\",\n edition_type = null,\n has_interiors = null,\n print_status = null,\n imprint = \"\",\n series = \"\",\n series_num = \"\",\n weight = null,\n carton_qty = null,\n description = \"\",\n bio = [],\n comments = [],\n reviews = [],\n subjects = [],\n catalogues = [],\n illustrations = \"\",\n interiors = [],\n language = \"\",\n\n marketing = {\n \"key_points\": [],\n \"more_info\": [],\n \"awards\": [],\n \"promotion\": [],\n \"printing\": [],\n \"extras\": {\n \"links\": [],\n \"publisher_links\": [],\n \"author_links\": []\n },\n \"sales_rights\": [\n ]\n }\n\n } = results;\n\n const {links = [], publisher_links = [], author_links = []} = marketing.hasOwnProperty(\"extras\") ? marketing.extras : {};\n\n\n const getTitle = () => {\n apiCall(\"title/getItem\", { isbn: isbn, want_keys_csv: \"description, bio, marketing, sales\" }, (_status, _result) => {\n if (_status) {\n setCache(cacheBuster());\n setResults(_result);\n getEdit();\n }\n })\n }\n\n const getEdit = (_currentedit) => {\n\n apiCall(\"title/getEdit\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n if (!_result.hasOwnProperty(\"annotation_data\")) {\n _result.annotation_data = [];\n }\n setEdit(_result);\n setLoading(false)\n }\n })\n }\n\n useEffect(getTitle, [isbn])\n\n const noCover = (e) => {\n e.target.src = nocover;\n e.target.onerror = null;\n }\n\n const parseBio = (_bios) => {\n\n if (!_bios || _bios.length === 0) {\n return (\"\");\n }\n return _bios.map((_bio, index) => {\n return (<Html key={index} html={_bio} />);\n });\n }\n\n const parseReviews = (_reviews) => {\n if (!_reviews || _reviews.length === 0) {\n return (\"\");\n }\n return _reviews.map((_review, index) => {\n return (<span key={index}><Html html={_review.content} /></span>);\n });\n }\n\n\n const drawLinks = (_arr, _label) => {\n\n if (_arr.length < 1) {\n return (<></>);\n }\n return (\n <>\n <strong className=\"c\">{_label}</strong><br />\n {_arr.map((item, _index) => {\n return (<div><a href={item.url}>{item.description}</a> <div className=\"shim\" /></div>);\n })}\n <div className=\"shim\" /> <div className=\"shim\" />\n </>\n )\n }\n\n const drawArray = (_arr, _label) => {\n\n return (\n <>\n <strong className=\"c\">{_label}</strong><br />\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n {_arr.map((item, _index) => {\n return (<Html html={item} />);\n })}\n </>\n )\n\n }\n\n const drawProductDetails = () => {\n\n return (<>\n <div className=\"details-box c\">\n\n\n {/* <conditional.true value={(!editing)}>\n <div key=\"0_price_ca\">\n <strong><small>Price CAD </small></strong><span><TitleEditField isbn={isbn} field=\"stat\" edit={edit} editing={editing}>{edit.stat}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(!editing)}>\n <div key=\"0_price_us\">\n <strong><small>Price USD </small></strong><span><TitleEditField isbn={isbn} field=\"stat\" edit={edit} editing={editing}>{edit.stat}</TitleEditField></span></div>\n </conditional.true> */}\n\n <conditional.true value={(editing)}>\n <div key=\"0_status\">\n <strong><small>Status </small></strong><span><TitleEditField isbn={isbn} field=\"stat\" edit={edit} editing={editing}>{edit.stat}</TitleEditField></span></div>\n </conditional.true>\n\n\n <conditional.true value={(binding || editing)}>\n <div key=\"0\">\n <strong><small>Binding </small></strong><span><TitleEditField isbn={isbn} field=\"binding\" edit={edit} editing={editing}>{binding}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(pages || editing)}>\n <div key=\"1\"><strong><small>Pages: </small></strong> <span><TitleEditField isbn={isbn} field=\"pages\" edit={edit} editing={editing}>{pages}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(series || editing)}>\n <div key=\"2\"><strong><small>Series: </small></strong> <span><TitleEditField isbn={isbn} field=\"series\" edit={edit} editing={editing}>{series}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"2_series_number\"><strong><small>Series Number: </small></strong> <span><TitleEditField isbn={isbn} field=\"series_number\" edit={edit} editing={editing}>{edit.series_number}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(series || editing)}>\n <div key=\"2_edition_type\"><strong><small>Edition Type: </small></strong> <span><TitleEditField isbn={isbn} field=\"edition_type\" edit={edit} editing={editing}>{edit.edition_type}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"2_edition_number\"><strong><small>Edition Number: </small></strong> <span><TitleEditField isbn={isbn} field=\"edition_num\" edit={edit} editing={editing}>{edit.edition_num}</TitleEditField></span></div>\n </conditional.true>\n\n\n <conditional.true value={(publisher || editing)}>\n <div key=\"3\"><strong><small>Publisher: </small></strong> <span><TitleEditField isbn={isbn} field=\"publisher\" edit={edit} editing={editing}>{publisher}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(language || editing)}>\n <div key=\"12\"><strong><small>Language: </small></strong> <span><TitleEditField isbn={isbn} field=\"language\" edit={edit} editing={editing}>{language}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(release_date || editing)}>\n <div key=\"4\"><strong><small>{(is_forthcoming) ? \"Releases:\" : \"Published:\"} </small></strong> <span><TitleEditField isbn={isbn} field=\"pubdate\" edit={edit} editing={editing}>{(release_date) ? moment(release_date * 1000).format(\"MMMM D, YYYY\") : \"\"}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"4_us\"><strong><small>{(is_forthcoming) ? \"Releases US:\" : \"Published US:\"} </small></strong> <span><TitleEditField isbn={isbn} field=\"pubdate_us\" edit={edit} editing={editing}>{(edit.pubdate_us) ? moment(edit.pubdate_us * 1000).format(\"MMMM D, YYYY\") : \"\"}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(audience || !editing)}>\n <div key=\"5\"><strong><small>Audience: </small></strong> {audience} </div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"5_a\"><strong><small>Audience code: </small></strong> <span><TitleEditField isbn={isbn} field=\"audience_code\" edit={edit} editing={editing}>{edit.audience_code}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"5_b\"><strong><small>Audience type: </small></strong> <span><TitleEditField isbn={isbn} field=\"audience_type\" edit={edit} editing={editing}>{edit.audience_type}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"5_c\"><strong><small>Audience min: </small></strong> <span><TitleEditField isbn={isbn} field=\"audience_min\" edit={edit} editing={editing}>{edit.audience_min}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"5_d\"><strong><small>Audience max: </small></strong> <span><TitleEditField isbn={isbn} field=\"audience_max\" edit={edit} editing={editing}>{edit.audience_max}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(subjects.length > 0 || editing)}>\n <div key=\"6\"><strong><small>Subjects: </small></strong><span style={{ \"display\": \"inline\", \"padding\": \"10px 0px\" }}><TitleEditField isbn={isbn} field=\"bisac_subjects\" edit={edit} editing={editing}>{parseSubjectsBisacs(subjects)}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(isbn && !editing)}>\n <div key=\"7\"><strong><small>EAN: </small></strong> <span>{isbn}</span> </div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"8_w\"><strong><small>Width: </small></strong> <span><TitleEditField isbn={isbn} field=\"width\" edit={edit} editing={editing}>{(width) ? width + '\"' : \"\"}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"8_h\"><strong><small>Height: </small></strong> <span><TitleEditField isbn={isbn} field=\"height\" edit={edit} editing={editing}>{(height) ? height + '\"' : \"\"}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(editing)}>\n <div key=\"8_d\"><strong><small>Depth: </small></strong> <span><TitleEditField isbn={isbn} field=\"depth\" edit={edit} editing={editing}>{(edit.depth) ? edit.depth + '\"' : \"\"}</TitleEditField></span> </div>\n </conditional.true>\n\n <conditional.true value={(width && !editing)}>\n <div key=\"8\"><strong><small>Physical Dimensions: </small></strong> <span>{width}\" x {height}\"</span> </div>\n </conditional.true>\n\n <conditional.true value={(weight || editing)}>\n <div key=\"9\"><strong><small>Shipping Weight: </small></strong> <span><TitleEditField isbn={isbn} field=\"weight\" edit={edit} editing={editing}>{(weight) ? weight.toString() + \"lbs.\" : \"\"}</TitleEditField></span></div>\n </conditional.true>\n\n <conditional.true value={(carton_qty && !editing)}>\n <div key=\"10\"><strong><small>Carton Quantity: </small></strong> <span>{(carton_qty) ? carton_qty.toString() : \"\"}</span></div>\n </conditional.true>\n\n <conditional.true value={(rank.bestseller)}>\n <div key=\"11\"> <strong><small>Sales Rank: </small></strong> {parseRank(rank)} </div>\n </conditional.true>\n\n </div><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /></>\n )\n }\n\n\n const strToArr = (_v) => {\n\n if (Array.isArray(_v)) {\n return _v;\n } else {\n if (_v) {\n return _v.split(\",\")\n } else {\n return [_v];\n }\n\n }\n }\n\n const drawFlags = (_v) => {\n return _v.map((item, index) => {\n return <span style={{ \"paddingRight\": \"5px\" }}><img src={\"https://cdn1.bookmanager.com/i/\" + item + \".png\"} /></span>\n })\n }\n\n\n const hasAnnotationData = (_num) => {\n \n let exists = edit.annotation_data.find((item) => item.id === _num)\n if (!exists) {\n exists = edit.missing_annotation_data.find((item) => item.id === _num)\n }\n return exists;\n }\n\n const getAnnotationData = (_num) => {\n let exists = edit.annotation_data.find((item) => item.id === _num);\n\n if (exists) {\n if (exists.hasOwnProperty(\"rows\")) {\n return exists.rows;\n } else {\n return []\n }\n }\n return [];\n }\n\n const drawDetails = () => {\n return (<>\n\n\n\n\n {/* <BisacSelector /> */}\n {/* <div className=\"shim\" style={{ \"width\": \"850px\", \"backgroundColor\": \"#eee\" }}></div>\n <br /> */}\n\n {/* <div style={{ \"padding\": \"0 0px\" }}>\n <div style={{ \"marginTop\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => drawComponent(null)} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div> */}\n\n\n <div style={{ \"padding\": \"0px\" }}>\n\n\n <div style={{ \"minWidth\": \"371px\" }}>\n <Space size={15} align=\"start\">\n <div style={{ \"width\": \"170px\", \"maxHeight\": \"400px\" }}>\n <CoverImage cache={cache} editing={editing} eisbn={eisbn} isbn={isbn} />\n\n <div className=\"shim\"></div>\n <Space>\n <Button className={(editing) ? \"ant-btn-primary\" : \"\"} size=\"small\" onClick={() => setEditing(!editing)} ><small>{(editing) ? <EditOutlined /> : <EditOutlined />}</small></Button>\n\n <Button loading={loading} size=\"small\" onClick={() => getTitle(!editing)} ><small><ReloadOutlined /></small></Button>\n\n </Space>\n\n </div>\n\n <div>\n\n <Typography.Title style={{ \"lineHeight\": \"22px\" }} level={4}>\n <TitleEditField isbn={isbn} field=\"title\" edit={edit} editing={editing}>{title}</TitleEditField>\n <div className=\"shim\" />\n <span style={{ \"color\": \"#666\", \"fontSize\": \"15px\", \"lineHeight\": \"16px\", \"display\": \"block\" }}>\n {subtitle}\n </span>\n <div className=\"shim\"></div>\n\n <conditional.true value={(!editing)}>\n {parseAuthors(authors)}\n </conditional.true>\n\n\n <conditional.true value={(editing)}>\n <span style={{ \"fontSize\": \"14px\", \"fontWeight\": \"normal\" }}>\n <TitleEditField isbn={isbn} field=\"author\" edit={edit} editing={editing}>{(authors[0]) ? <a style={{ \"color\": \"#069\", \"fontWeight\": \"600\" }}>{authors[0].name}</a> : \"\"}</TitleEditField>   \n <TitleEditField isbn={isbn} field=\"author2\" edit={edit} editing={editing}>{(authors[1]) ? <><a style={{ \"color\": \"#069\", \"fontWeight\": \"600\" }}>{authors[1].name}</a></> : \"\"}</TitleEditField>   \n <TitleEditField isbn={isbn} field=\"author3\" edit={edit} editing={editing}>{(authors[2]) ? <><a style={{ \"color\": \"#069\", \"fontWeight\": \"600\" }}>{authors[2].name}</a></> : \"\"}</TitleEditField>\n </span>\n </conditional.true>\n\n </Typography.Title>\n\n <Typography.Paragraph style={{ \"fontSize\": \"14px\" }}>\n\n {/* Publisher */}\n <conditional.true value={(publisher || editing)}>\n <TitleEditField isbn={isbn} field=\"publisher\" edit={edit} editing={editing}>{publisher}</TitleEditField><br />\n </conditional.true>\n\n {/* Subjects */}\n <conditional.true value={(subjects || editing)}>\n <TitleEditField isbn={isbn} field=\"bisac_subjects\" edit={edit} editing={editing}>{parseSubjects(subjects)}</TitleEditField> <br />\n </conditional.true>\n\n {/* Binding */}\n <conditional.true value={(binding || editing)}>\n <TitleEditField isbn={isbn} field=\"binding\" edit={edit} editing={editing}>{(binding) ? <strong>{binding}</strong> : \"\"}</TitleEditField><br />\n </conditional.true>\n\n {/* Publish Date */}\n <conditional.true value={(release_date || editing)}>\n <TitleEditField isbn={isbn} field=\"pubdate\" edit={edit} editing={editing}>{(release_date && <><strong>{(is_forthcoming) ? \"Releases:\" : \"Published:\"} </strong>{moment(release_date * 1000).format(\"MMMM D, YYYY\")} </>)}</TitleEditField><br />\n </conditional.true>\n\n {/* US Publish Date */}\n <conditional.true value={(editing)}>\n <TitleEditField isbn={isbn} field=\"pubdate_us\" edit={edit} editing={editing}>{(edit.pubdate_us && <><strong>{(is_forthcoming) ? \"Releases US:\" : \"Published US:\"} </strong>{moment(edit.pubdate_us * 1000).format(\"MMMM D, YYYY\")} </>)}</TitleEditField><br />\n </conditional.true>\n\n {/* Series */}\n <conditional.true value={(series || editing)}>\n <TitleEditField isbn={isbn} field=\"series\" edit={edit} editing={editing}>{(release_date && <><strong>Series: </strong><a>{series}</a> </>)}</TitleEditField><br />\n </conditional.true>\n\n {/* Series Number */}\n <conditional.true value={(editing)}>\n <TitleEditField isbn={isbn} field=\"series_number\" edit={edit} editing={editing}>{(edit.series_number) ? <><strong>Series Number: </strong>{edit.series_number}</> : \"\"}</TitleEditField><br />\n </conditional.true>\n\n {/* Rank */}\n <conditional.true value={(rank)}>\n {parseRank(rank)}\n </conditional.true>\n\n <div style={{ \"height\": \"20px\" }} className=\"shim\"></div>\n\n </Typography.Paragraph>\n </div>\n </Space>\n\n <div className=\"shim\" /><div className=\"shim\" />\n\n <Tabs className=\"itemTabs\" size=\"small\" type=\"card\" defaultActiveKey=\"description\">\n\n\n <Tabs.TabPane tab={<small>Description</small>} key=\"description\">\n {/* Description */}\n <TitleEditField isbn={isbn} annotation={hasAnnotationData(1)} field=\"main_description\" edit={edit} editing={editing}>\n {(description) ? <Html html={description} /> : \"\"}\n </TitleEditField>\n\n <conditional.true value={(editing)}>\n <br />\n <TitleEditField isbn={isbn} annotation={hasAnnotationData(2)} field=\"short_description\" edit={edit} editing={editing}>\n {parseBio(getAnnotationData(2))}\n </TitleEditField>\n\n <br />\n <TitleEditField isbn={isbn} annotation={hasAnnotationData(3)} field=\"long_description\" edit={edit} editing={editing}>\n {parseBio(getAnnotationData(3))}\n </TitleEditField>\n\n <br />\n <TitleEditField isbn={isbn} annotation={hasAnnotationData(12)} field=\"reader_description\" edit={edit} editing={editing}>\n {parseBio(getAnnotationData(12))}\n </TitleEditField>\n <br />\n <TitleEditField isbn={isbn} annotation={hasAnnotationData(8)} field=\"review_quote\" edit={edit} editing={editing}>\n {parseBio(getAnnotationData(12))}\n </TitleEditField>\n\n <br />\n\n\n </conditional.true>\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>Author</small>} key=\"author\">\n <TitleEditField annotation={hasAnnotationData(13)} isbn={isbn} field=\"bio\" edit={edit} editing={editing}>\n {parseBio(bio)}\n </TitleEditField>\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>Details</small>} key=\"details\">\n {drawProductDetails()}\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>Reviews</small>} key=\"reviews\">\n <TitleEditField isbn={isbn} field=\"reviews\" annotation={hasAnnotationData(8)} edit={edit} editing={editing}>{parseReviews(reviews)}</TitleEditField>\n </Tabs.TabPane>\n\n <Tabs.TabPane tab={<small>Marketing</small>} key=\"marketing\">\n {/* // Removed by kellynda's request #1131 */}\n {/* <conditional.true value={((marketing.sales_rights.length > 0) || editing)}>\n <TitleEditField isbn={isbn} field=\"sales_rights_exclude\" edit={edit} editing={editing}>{(marketing.sales_rights.length > 0) ? <><strong className=\"c\">Sales Rights</strong><Divider style={{ \"margin\": \"10px 0px\" }} dashed />{drawFlags(marketing.sales_rights)}</> : <strong className=\"c\">Sales Rights</strong>}</TitleEditField>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n </conditional.true> */}\n\n <conditional.true value={(marketing.key_points.length > 0)}>\n <div className=\"shim\" />\n {drawArray(marketing.key_points, \"Key Points\")}\n </conditional.true>\n\n <conditional.true value={(marketing.more_info.length > 0)}>\n <div className=\"shim\" />\n {drawArray(marketing.more_info, \"More Info\")}\n </conditional.true>\n\n <conditional.true value={(marketing.awards.length > 0)}>\n <div className=\"shim\" />\n {drawArray(marketing.awards, \"Awards\")}\n </conditional.true>\n\n <conditional.true value={(marketing.promotion.length > 0)}>\n <div className=\"shim\" />\n {drawArray(marketing.promotion, \"Promotion\")}\n </conditional.true>\n\n <conditional.true value={(marketing.printing.length > 0)}>\n <div className=\"shim\" />\n {drawArray(marketing.printing, \"Printing\")}\n </conditional.true>\n\n\n\n <conditional.true value={((links.length > 0) || (publisher_links.length > 0) || (author_links.length > 0))}>\n <div className=\"shim\" />\n {drawLinks(links, \"Links\")}\n {drawLinks(publisher_links, \"Publisher Links\")}\n {drawLinks(author_links, \"Author Links\")}\n </conditional.true>\n\n\n\n\n </Tabs.TabPane>\n\n\n\n\n\n\n\n </Tabs>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </div>\n </>)\n }\n\n\n\n\n\n\n if (loading) {\n return (<Spin style={{ \"width\": \"1024px\", \"background\": \"transparent\" }}><div style={{ \"height\": \"200px\", \"background\": \"transparent\" }}></div></Spin>);\n }\n\n return drawDetails();\n\n\n\n}\n\n","import { EyeInvisibleOutlined, EyeOutlined, PushpinFilled, PushpinOutlined } from '@ant-design/icons';\nimport { Button, Tabs, Tooltip } from \"antd\";\nimport Cookies from \"js-cookie\";\nimport React, { useEffect, useState } from \"react\";\nimport ReactPlayer from 'react-player'\n\nimport { apiCall } from \"../../utils/Api\";\nimport Html from \"../../utils/Html\";\nimport { usePrefs } from \"../../utils/Prefs\";\nimport { ucfirst } from \"../../utils/Utils\";\nimport Comments from \"../Comments\";\n\nexport default function TitleExtras(props) {\n\n\n const { isbn = \"\", data = {} } = props;\n const [prefs, setPrefs] = usePrefs();\n const [active, setActive] = useState(prefs.selected);\n\n const {\n media = [], \n tab_data = {\n comments: [],\n description: \"\",\n bios: [],\n reviews: [],\n marketing: {\n key_points: [],\n more_info: [],\n awards: [],\n promotion: [],\n printing: [],\n extras: {\n links: [],\n publisher_links: [],\n author_links: [],\n video_links: []\n },\n sales_rights: []\n }\n } \n } = data;\n\n const recheck = () => {\n if (active !== prefs.selected) {\n setActive(prefs.selected);\n }\n }\n\n useEffect(recheck, [prefs.selected]);\n\n const pin = (e, _key) => {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n if (prefs.selected === _key) {\n Cookies.set(\"selected\", \"\");\n setPrefs({ ...prefs, \"selected\": \"\" });\n } else {\n Cookies.set(\"selected\", _key);\n setPrefs({ ...prefs, \"selected\": _key });\n }\n }\n\n const drawPin = (_key) => {\n if (_key === prefs.selected) {\n return <>  <div style={{ \"display\": \"inline-block\", \"margin\": \"-5px\" }}><PushpinFilled onClick={(e) => pin(e, _key)} style={{ \"marginRight\": \"0px\", \"opacity\": \"1\", \"fontSize\": \"11px\", \"padding\": \"5px\" }} /></div></>\n } else {\n if (active === _key) {\n return <>  <div style={{ \"display\": \"inline-block\", \"margin\": \"-5px\" }}><Tooltip title={<small>Click to pin</small>}><PushpinOutlined onClick={(e) => pin(e, _key)} style={{ \"marginRight\": \"0px\", \"opacity\": \"0.5\", \"fontSize\": \"11px\", \"padding\": \"5px\" }} /></Tooltip></div></>\n } else {\n return \"\";\n }\n }\n }\n\n const drawCount = (_key) => {\n let _ret;\n let _active = (active === _key);\n switch (_key) {\n case \"description\":\n let _desc_length = (tab_data.description) ? 1 : 0;\n if (!_active && _desc_length) {\n _ret = <small>({_desc_length})</small>\n } else {\n _ret = \"\";\n }\n break;\n\n case \"comments\":\n let _comment_length = tab_data.comments.length;\n if (!_active && _comment_length) {\n _ret = <small>({_comment_length})</small>\n } else {\n _ret = \"\";\n }\n break;\n\n case \"author\":\n let _bios_length = tab_data.bios.length;\n if (!_active && _bios_length) {\n _ret = <small>({_bios_length})</small>\n } else {\n _ret = \"\";\n }\n break;\n\n case \"reviews\":\n let _reviews_length = tab_data.reviews.length;\n if (!_active && _reviews_length) {\n _ret = <small>({_reviews_length})</small>\n } else {\n _ret = \"\";\n }\n break;\n\n case \"marketing\":\n let _marketing_length = tab_data.marketing.key_points.length;\n _marketing_length += tab_data.marketing.more_info.length;\n _marketing_length += tab_data.marketing.awards.length;\n _marketing_length += tab_data.marketing.promotion.length;\n _marketing_length += tab_data.marketing.printing.length;\n // Removed by kellynda's request #1131\n //_marketing_length += results.marketing.sales_rights.length;\n if (tab_data.marketing.hasOwnProperty(\"extras\") && !Array.isArray(tab_data.marketing.extras)) {\n _marketing_length += tab_data.marketing.extras.publisher_links.length;\n _marketing_length += tab_data.marketing.extras.author_links.length;\n _marketing_length += tab_data.marketing.extras.video_links.length;\n }\n if (!_active && _marketing_length) {\n _ret = <small>({_marketing_length})</small>\n } else {\n _ret = \"\";\n }\n break;\n\n case \"videos\":\n let youtube_ids = grabYouTubeIDs();\n let display_urls = grabMediaURLs();\n let video_links = youtube_ids.concat(display_urls);\n if (!_active && video_links.length > 0) {\n _ret = <small>({video_links.length})</small>\n } else {\n _ret = \"\";\n }\n break;\n default:\n _ret = \"\";\n break;\n }\n return _ret;\n }\n\n const drawMarketing = (_arr) => {\n let inc = 0;\n let _ret = Object.keys(_arr).map(_key => {\n if (_key === \"extras\") {\n return Object.keys(_arr[_key]).map(_k => {\n return _arr[_key][_k].map((_itm, index) => {\n if (_itm) {\n inc++;\n }\n if (_itm.hasOwnProperty(\"url\") && _itm.hasOwnProperty(\"desc\")) {\n return <>{(index === 0 && <div><div className=\"shim\" /><div className=\"shim\" /><strong className=\"c\">{ucfirst(_k)}</strong></div>)}<ul style={{ \"marginBottom\": \"0px\" }}><li><div><a target={\"_blank\"} href={_itm.url}>{(_itm.desc) ? _itm.desc : _itm.url}</a></div></li></ul></>\n }\n return (<>{(index === 0 && <div><div className=\"shim\" /><div className=\"shim\" /><strong className=\"c\">{ucfirst(_k)}</strong></div>)}<Html key={index} html={_itm} /></>);\n });\n })\n } else {\n return _arr[_key].map((_itm, index) => {\n if (_itm) {\n inc++;\n }\n // Removed by kellynda's request #1131\n if (_key === \"sales_rights\") {\n return (<></>);\n }\n if (_key === \"more_info\" || _key === \"awards\") {\n return (<>{(index === 0 && <div><div className=\"shim\" /><div className=\"shim\" /><strong className=\"c\">{ucfirst(_key)}</strong></div>)}<Html key={index} html={_itm} /><div className=\"shim\" /></>);\n }\n return (<>{(index === 0 && <div><div className=\"shim\" /><div className=\"shim\" /><strong className=\"c\">{ucfirst(_key)}</strong></div>)}<ul style={{ \"marginBottom\": \"0px\" }}><li><Html key={index} html={_itm} /></li></ul><div className=\"shim\" /></>);\n });\n }\n })\n if (inc > 0) {\n return _ret;\n } else {\n return <></>// <Empty imageStyle={{ height: 20}} className=\"small-empty\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n }\n }\n\n const parseReviews = (_reviews) => {\n if (!_reviews || _reviews.length === 0) {\n return (\"\");\n }\n return _reviews.map((_review, index) => {\n return (<span key={index}><Html html={_review.content} />{(_review.author) ? <div className=\"float-flex\"><div></div><em>-{_review.author}</em></div> : <></>}<div className=\"shim\" /><div className=\"shim\" /></span>);\n });\n }\n\n function marketingCheck(){\n for(const [key, value] of Object.entries(tab_data.marketing)){\n if(value.length > 0 && key !== \"sales_rights\"){\n return true;\n }\n }\n return false;\n }\n\n function drawMarketingTab(){\n if(marketingCheck()){\n return(\n <Tabs.TabPane tab={<small>Marketing {drawPin(\"marketing\")} {drawCount(\"marketing\")}</small>} key=\"marketing\">\n <div className=\"testClass\">{drawMarketing(tab_data.marketing)}</div>\n </Tabs.TabPane>\n )\n }\n }\n\n function grabYouTubeIDs(){\n let media_urls = \"\";\n for(let i = 0; i < media.length; i++){\n if(media[i].type === \"component\"){\n media_urls = media[i].data\n }\n }\n return media_urls;\n }\n\n function grabMediaURLs(){\n let media_urls = \"\";\n for(let i = 0; i < media.length; i++){\n if(media[i].type === \"url\"){\n media_urls = media[i].data\n }\n }\n return media_urls;\n }\n\n function drawVideosTab(){\n let youtube_ids = grabYouTubeIDs();\n let display_urls = grabMediaURLs();\n if(display_urls.length > 0 || youtube_ids.length > 0){\n return(<>\n <Tabs.TabPane tab={<small>Videos {drawPin(\"Videos\")} {drawCount(\"videos\")}</small>} key=\"video_links\">\n {/* \n See this for more info on ReactPlayer:\n https://github.com/CookPete/react-player\n A good ISBN to test how the player looks:\n 9798396136106\n */}\n {youtube_ids.map((item) => {\n return(\n <div style={{\"marginBottom\": \"10px\"}} className='player-wrapper'>\n <ReactPlayer\n className='react-player' \n url={'https://www.youtube.com/watch?v=' + item} \n controls={true}\n width=\"100%\"\n height=\"100%\"/>\n </div>)\n })}\n {display_urls.map((item) => {\n return(\n <div style={{\"marginBottom\": \"10px\"}} className='player-wrapper'>\n <ReactPlayer\n className='react-player' \n url={item} \n controls={true}\n width=\"100%\"\n height=\"100%\"/>\n </div>)\n })}\n </Tabs.TabPane>\n </>)\n }\n }\n\n return (\n <>\n <div className=\"shim\" /><div className=\"shim\" />\n <Tabs \n className=\"itemTabs\" \n onChange={(e) => {\n if (e !== active) {\n setActive(e)\n } else {\n setActive(\"\")\n }\n }} \n tabBarStyle={{ \"padding\": \"0px\" }} \n size=\"small\" \n type=\"card\" \n activeKey={(active) ? active : false}>\n <Tabs.TabPane tab={<small>Comments {drawPin(\"comments\")} {drawCount(\"comments\")}</small>} key=\"comments\">\n <Comments comments={tab_data.comments} row isbn={isbn} />\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>Description {drawPin(\"description\")} {drawCount(\"description\")}</small>} key=\"description\">\n <Html key=\"description\" html={tab_data.description} />\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>Author {drawPin(\"author\")} {drawCount(\"author\")}</small>} key=\"author\">\n {tab_data.bios.map((_itm, index) => {\n return (<div key={index}><Html html={_itm} /><div className=\"shim\" /><hr/><div className=\"shim\" /></div>);\n })}\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>Reviews {drawPin(\"reviews\")} {drawCount(\"reviews\")}</small>} key=\"reviews\">\n {parseReviews(tab_data.reviews)}\n </Tabs.TabPane>\n {drawVideosTab()}\n {drawMarketingTab()}\n </Tabs>\n </>\n );\n}","import { Card, Image, Badge, Modal, Carousel, Button, Space } from \"antd\";\nimport React, { useEffect, useState, useRef } from \"react\";\nimport nocover from \"../../media/no-cover.png\";\nimport { FileImageTwoTone, CloseOutlined, FullscreenOutlined, RightCircleOutlined, LeftCircleOutlined, DownloadOutlined } from '@ant-design/icons';\nimport conditional from \"../../utils/conditional\";\nimport { apiCall } from \"../../utils/Api\";\nimport { downloadImage } from \"../../utils/Utils\";\nimport moreImages from \"../../media/More_Images_v3.png\"\n\nexport default function TitleImage2(props) {\n\n const { \n cover_image_key = \"\", \n isbn = \"\", \n eisbn = \"\", \n has_interiors = [], \n cover_image_cache = 0,\n highlight = false, \n } = props;\n const [visible, setVisible] = useState(false);\n const [interiors, setInteriors] = useState([]);\n const [opened, setOpened] = useState(false);\n\n const image_path = \"https://cdn1.bookmanager.com/i/m?b=\" + eisbn + \"&cb=\" + cover_image_cache + (cover_image_key && \"&b2b=\" + cover_image_key);\n\n const [c, setC] = useState(0);\n const media = useRef()\n const nav = useRef()\n\n const noCover = (e) => {\n e.target.src = nocover;\n e.target.onerror = null;\n }\n\n const getInteriors = () => {\n if (has_interiors) {\n apiCall(\"title/getItem\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n setInteriors(_result.interior_objects);\n setOpened(true);\n }\n })\n }\n }\n\n const open = () => {\n setVisible(true);\n if (!opened) {\n getInteriors();\n }\n }\n\n const getInteriorPath = (_int, _cb = \"\", _b2b = \"\") => {\n _int = _int.toString();\n let _path = \"https://cdn1.bookmanager.com/i/m?b=\" + eisbn + \"&imgp=\";\n if (_b2b) {\n _path += _int\n _path += \"&b2b=\" + _b2b;\n } else {\n _path += _int\n }\n _path = _path + \"&cb=\" + _cb;\n return _path;\n }\n\n const close = () => {\n setVisible(false)\n }\n\n function drawImage(){\n if(highlight){\n return {\n borderStyle: \"solid\",\n borderColor: \"#ff0099\",\n borderWidth: \"3px\"\n }\n }\n return {\n borderStyle: \"none\",\n }\n }\n\n return (\n <>\n <Modal maskStyle={{ \"background-color\": \"rgb(0,0,0,.8)\" }} width={\"100%\"} onCancel={() => close()} zIndex={9999} visible={visible}\n modalRender={() => <>\n <div style={{ \"position\": \"absolute\", \"top\": \"0px\", \"right\": \"0px\", \"marginTop\": \"-80px\" }}>\n <Button type=\"text\"><CloseOutlined style={{ \"color\": \"#fff\", \"cursor\": \"pointer\" }} /></Button>\n </div>\n <div>\n <Carousel effect=\"fade\" afterChange={(e) => setC(e)} touchMove={true} draggable={true} asNavFor={nav.current} ref={media} dots={false} style={{ \"height\": \"calc(100vh - 150px)\" }}>\n <div onClick={() => close()} style={{ \"maxHeight\": \"100px\" }} key={\"main\"}>\n <div style={{ \"textAlign\": \"center\" }}>\n <div style={{ \"width\": \"100%\" }}>\n <div style={{ \"float\": \"left\", \"marginTop\": \"10%\" }}>\n {((interiors.length > 0) && <div className=\"galleryButton\" onClick={(e) => { e.stopPropagation(); media.current.prev() }}><LeftCircleOutlined /></div>)}\n </div>\n <div style={{ \"float\": \"right\", \"marginTop\": \"10%\", \"marginRight\": \"30px\" }}>\n {((interiors.length > 0) && <div className=\"galleryButton\" onClick={(e) => { e.stopPropagation(); media.current.next() }}><RightCircleOutlined /></div>)}\n </div>\n <div style={{ \"color\": \"#fff\", \"margin\": \"0 auto\", \"textAlign\": \"center\", \"height\": \"20px\", \"position\": \"relative\", \"zIndex\": ((c === 0)) ? \"9999\" : \"0\" }} >\n {((c === 0) &&\n <div style={{ \"display\": \"inline\", \"cursor\": \"pointer\" }} onClick={(e) => {\n e.stopPropagation(); window.open(image_path, \"_blank\");\n }}>\n </div>\n )}\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n <img key={\"init\"} onClick={(e) => { e.stopPropagation(); }} style={{ \"margin\": \"0 auto\", \"maxHeight\": \"calc(100vh - 250px)\" }} src={image_path} />\n </div>\n </div>\n </div>\n {interiors.map((interior, index) => {\n return (<div onClick={() => close()} style={{ \"maxHeight\": \"100px\" }} key={index}>\n <div style={{ \"color\": \"#fff\", \"margin\": \"0 auto\", \"textAlign\": \"center\", \"height\": \"20px\", \"position\": \"relative\", \"zIndex\": ((c === (index + 1))) ? \"9999\" : \"0\" }} >\n {(c === (index + 1)) &&\n <div style={{ \"display\": \"inline\", \"cursor\": \"pointer\" }} onClick={(e) => {\n e.stopPropagation(); window.open(getInteriorPath(interior.key, interior.cb, interior.b2b));\n }}></div>\n }\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"textAlign\": \"center\" }}>\n <div style={{ \"float\": \"left\", \"marginTop\": \"10%\" }}>\n {((interiors.length > 0) && <div className=\"galleryButton\" onClick={(e) => { e.stopPropagation(); media.current.prev() }}><LeftCircleOutlined /></div>)}\n </div>\n <div style={{ \"float\": \"right\", \"marginTop\": \"10%\", \"marginRight\": \"30px\" }}>\n {((interiors.length > 0) && <div className=\"galleryButton\" onClick={(e) => { e.stopPropagation(); media.current.next() }}><RightCircleOutlined /></div>)}\n </div>\n <img onClick={(e) => e.stopPropagation()} style={{ \"margin\": \"0 auto\", \"maxHeight\": \"calc(100vh - 250px)\" }} src={getInteriorPath(interior.key, interior.cb, interior.b2b)} />\n </div>\n </div>)\n })}\n </Carousel>\n <conditional.true value={interiors.length > 0}>\n <div style={{ \"margin\": \"0 auto\", \"width\": ((interiors.length + 1) * 50) + \"px\", \"marginTop\": \"-50px\" }}>\n <Carousel touchMove={true} draggable={true} ref={nav} slidesToShow={interiors.length + 1} dots={false} style={{ \"height\": \"30px\", \"width\": ((interiors.length + 1) * 50) + \"px\" }}>\n <div onClick={() => close()} style={{ \"maxHeight\": \"40px\" }} key={\"main\"}>\n <img key={\"init\"} onClick={(e) => {\n media.current.goTo(0);\n e.stopPropagation()\n }} style={{ \"margin\": \"0 auto\", \"maxWidth\": \"40px\", \"cursor\": \"pointer\" }} src={image_path} />\n </div>\n {interiors.map((interior, index) => {\n return (<div onClick={() => close()} style={{ \"maxHeight\": \"40px\" }} key={index}>\n <img onClick={(e) => {\n media.current.goTo(index + 1);\n e.stopPropagation()\n }} style={{ \"margin\": \"0 auto\", \"maxWidth\": \"40px\", \"cursor\": \"pointer\" }} src={getInteriorPath(interior.key, interior.cb, interior.b2b)} />\n </div>)\n })}\n </Carousel>\n </div>\n </conditional.true>\n </div>\n </>}\n ></Modal >\n \n <Image\n preview={{\n visible: false, mask: <><Space size={0} style={{ \"textAlign\": \"center\" }} direction=\"vertical\"><small><FullscreenOutlined style={{ \"fontSize\": \"25px\" }} /></small>\n <small style={{ \"fontSize\": \"20px\" }}>See {(has_interiors) ? \" all images\" : \"cover image\"}</small>\n <div className=\"shim\" />\n <div\n style={{ \"position\": \"absolute\", \"bottom\": \"5px\", \"left\": \"35px\" }}\n onClick={(e) => {\n e.stopPropagation();\n window.open(image_path, \"_blank\");\n\n }}></div>\n </Space></>\n }}\n style={drawImage()}\n fallback={nocover}\n className=\"shadow-large\"\n width={140}\n src={(eisbn) ? image_path : \"\"}\n onClick={() => (eisbn) ? open(true) : () => { }}\n />\n <conditional.true value={(has_interiors)}>\n <div style={{ \"backgroundColor\": \"#1b1b1b\" }}>\n <div style={{ \n \"top\": \"0px\", \n \"position\": \"absolute\", \n \"zIndex\": 11,\n \"color\": \"#fff\", \n \"padding\": \"3px 1px\", \n \"lineHeight\": \"12px\"}}>\n <Image \n style={\n {\n \"width\": 16, \n \"height\": 16, \n \"opacity\": \"0.8\", \n \"imageRendering\": \"pixelated\"\n }\n } \n src={moreImages}\n preview={false}/>\n \n </div>\n </div>\n </conditional.true>\n {/* <conditional.true value={(has_interiors)}>\n\n <div style={{ \"backgroundColor\": \"#1b1b1b\" }}>\n <div style={{ \"top\": \"0px\", \"left\": \"9px\", \"position\": \"absolute\", \"color\": \"#fff\", \"backgroundColor\": \"#e77e21\", \"padding\": \"3px 1px\", \"lineHeight\": \"12px\" }}><FileImageOutlined /></div>\n\n </div>\n </conditional.true> */}\n\n <div style={{ \"display\": \"none\" }}>\n {/* <Image.PreviewGroup preview={{ visible, mask : <>mask</>, maskClassName: \"dark-mask\", onVisibleChange: vis => setVisible(vis) }}>\n <div>\n Stuff\n <Image key={\"main\"} src={\"https://cdn1.bookmanager.com/i/m?b=\" + eisbn} />\n {interiors.map((interior, index) => {\n return (<Image key={index} src={\"https://cdn1.bookmanager.com/i/m?b=\" + eisbn + \"&imgp=\" + interior} />)\n })}\n </div>\n \n </Image.PreviewGroup> */}\n\n\n </div>\n </>\n )\n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJDRUIzQjFEMkQ5MjExRUU5MzU3QjA1NjExRjIyNzYzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJDRUIzQjFFMkQ5MjExRUU5MzU3QjA1NjExRjIyNzYzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkNFQjNCMUIyRDkyMTFFRTkzNTdCMDU2MTFGMjI3NjMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkNFQjNCMUMyRDkyMTFFRTkzNTdCMDU2MTFGMjI3NjMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4tw8nCAAAAtUlEQVR42mL8//8/w0ACFhDByMh4hkz9JpRYDvI8E8MAAxZkzuNHz4nSJCsnSZJ6XPpBYHCFADEuRhPHm3aAIUQwjQyNECA3jRADhlYIUDuNgMqR4REClKSRAQ+BUQeMOoCmDgCldkKl4vAqB3CVjPjaD4MrBEipxYgpEYlpOQ2aEDDB51IiajWy64ahlQuolUaGXggQat2Sm0YGRQgwgvpnwL4hpeaQFQJAu00GRwgMJAAIMACypDhDoT65cAAAAABJRU5ErkJggg==\"","import { Popover, Space } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { CaretDownOutlined } from '@ant-design/icons';\nimport { getMemory, saveMemory } from \"../../utils/Utils\";\n\n\n\n\nexport default function TitleLinks(props) {\n\n const { isbn = \"\", authors = [] } = props;\n const [open, setOpen] = useState(false);\n\n let _index = 0;\n let _memories = getMemory(\"titlelink\");\n if (_memories.length > 0) {\n\n if (isNaN(_memories[0])) {\n _index = 0\n } else {\n _index = _memories[0];\n }\n\n }\n\n\n const [index, setIndex] = useState(_index);\n\n\n const toIsbn10 = (isbn13) => {\n const isbn = isbn13.substring(3);\n\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n const mul = 10 - i;\n sum += parseInt(isbn.charAt(i)) * mul;\n }\n\n let check = 11 - sum % 11;\n if (check == 10) check = \"X\";\n return `${isbn.substring(0, 9)}${check}`;\n }\n\n\n\n\n\n\n\n const sites = [\n {\n label: \"Amazon\",\n ico: \"icon_amazon.png\",\n get: (isbn) => {\n if (isbn.substr(0, 3).toString() === \"979\") {\n return `https://www.amazon.com/s?k=${isbn}`;\n } else {\n const isbn10 = toIsbn10(isbn);\n return `https://amazon.com/exec/obidos/ASIN/${isbn10}`;\n }\n }\n },\n {\n label: \"Amazon Canada\",\n ico: \"icon_amazoncdn.png\",\n get: (isbn) => {\n return `https://www.amazon.ca/s?k=${isbn}`;\n // const isbn10 = toIsbn10(isbn);\n // return `https://amazon.ca/exec/obidos/ASIN/${isbn10}`;\n }\n\n },\n\n\n {\n label: \"BNC Catalist\",\n ico: \"icon_bnccatalist2.png\",\n get: (isbn) => `https://bnccatalist.ca/SearchResults.aspx?search==${isbn}`\n },\n {\n label: \"BookFinder\",\n ico: \"icon_bookfinder.png\",\n get: (isbn) => `https://bookfinder.com/search/?isbn=${isbn}&mode=basic&st=sr&ac=qr`\n },\n {\n label: \"Christianbook\",\n ico: \"icon_christianbook.png\",\n get: (isbn) => `https://christianbook.com/Christian/Books/easy_find?Ntt=${isbn}&Ntk=keywords&action=Search`\n },\n {\n label: \"Edelweiss+\",\n ico: \"icon_edelweiss_plus.png\",\n get: (isbn) => `https://www.edelweiss.plus/#sku=${isbn}`\n },\n {\n label: \"Goodreads\",\n ico: \"icon_goodreads.png\",\n get: (isbn) => `https://goodreads.com/search?query=${isbn}`\n },\n {\n label: \"Google\",\n ico: \"icon_google-2015.png\",\n get: (isbn) => `https://google.com/search?q=${isbn}`\n },\n {\n label: \"Literature Map\",\n ico: \"icon_literaturemap.png\",\n special: true,\n get: (first, last) => `https://literature-map.com/${first}+${last}`\n },\n\n\n {\n label: \"BNC SalesData\",\n ico: \"icon_bncsalesdata.png\",\n get: (isbn) => `https://www.salesdata.ca/TitleISBNResults.aspx?rng=lifetime&isbn=${isbn}`\n },\n\n {\n label: \"BookDepot\",\n ico: \"icon_bookdepot.png\",\n get: (isbn) => `https://bookdepot.ca/Store/Search?qf=All&q=${isbn}`\n },\n\n {\n label: \"49th shelf\",\n ico: \"icon_49thshelf.png\",\n get: (isbn) => `http://49thshelf.com/content/search?search_in=93&SearchButton=&SearchText=${isbn}`\n },\n\n {\n label: \"iPage\",\n ico: \"icon_ipage.png\",\n get: (isbn) => `https://ipage.ingramcontent.com/ipage/administration/home/home.action`\n },\n\n {\n label: \"B&T TS360\",\n ico: \"icon_baker_taylor.png\",\n get: (isbn) => `https://ts360.baker-taylor.com/_layouts/CommerceServer/QuickSearch.aspx?keyword=${isbn}`\n },\n\n {\n label: \"Indigo\",\n ico: \"icon_chapters.png\",\n get: (isbn) => `https://www.chapters.indigo.ca/home/search/?keywords=${isbn}`\n },\n\n {\n label: \"Barnes & Noble\",\n ico: \"icon_bn.png\",\n get: (isbn) => `http://barnesandnoble.com/s/${isbn}`\n },\n\n {\n label: \"books.google.com\",\n ico: \"icon_google-2015.ico\",\n get: (isbn) => `http://www.google.com/search?tbs=bks%3A1&tbo=1&btnG=Search+Books&q=${isbn}`\n },\n\n {\n label: \"AbeBooks\",\n ico: \"icon_abebooks.png\",\n get: (isbn) => `http://www.abebooks.com/servlet/SearchResults?sts=t&x=81&y=12&isbn=${isbn}`\n },\n\n {\n label: \"Powell's\",\n ico: \"icon_powells.png\",\n get: (isbn) => `http://www.powells.com/searchresults?keyword=${isbn}`\n },\n\n\n {\n label: \"Alibris\",\n ico: \"icon_alibris.png\",\n get: (isbn) => `http://www.alibris.com/booksearch?binding=&mtype=B&hs.x=0&hs.y=0&hs=Submit&keyword=${isbn}`\n },\n\n {\n label: \"ebay.com\",\n ico: \"icon_ebay.png\",\n get: (isbn) => `http://shop.ebay.com/${isbn}`\n },\n\n\n {\n label: \"NetGalley\",\n ico: \"icon_netgalley.png\",\n get: (isbn) => `https://www.netgalley.com/catalog/?text=${isbn}`\n },\n\n\n\n\n\n ]\n\n\n\n\n\n\n\n\n // { 'icon': '/i/icon_netgalley.png', 'text': 'NetGalley', 'url': 'https://www.netgalley.com/catalog/?text=%s', 'format_type': 2, 'formatted_isbn': isbn13 }\n\n\n const linkOut = (_url, _index) => {\n\n saveMemory(\"titlelink\", _index);\n setIndex(_index);\n setOpen(false);\n window.open(_url, \"_blank\");\n }\n\n const drawLink = (_itm, _index, _label = true) => {\n\n\n if (!_itm) {\n return \"\";\n }\n let icon = `https://cdn1.bookmanager.com/i/${_itm.ico}`;\n let url = \"\";\n if (_itm.hasOwnProperty(\"special\")) {\n\n if (!authors.length > 0) {\n return \"\";\n }\n\n let a = authors[0].name;\n if (a.name) {\n let name = a.name.toLowerCase().split(\" \");\n url = _itm.get(name[0], name[1]);\n }\n } else {\n url = _itm.get(isbn);\n }\n\n\n if (_label) {\n\n return (\n\n <a className=\"c\" onClick={() => linkOut(url, _index)} key={_index} rel=\"noopener\">\n <Space>\n <div style={{ \"background\": \"url(\" + icon + \") no-repeat #fff center\", \"height\": \"18px\", \"width\": \"18px\", \"padding\": \"2px\", \"borderRadius\": \"2px\", \"backgroundColor\": \"#fff\" }}>\n {/* <img width=\"16px\" height=\"16px\" alt={_itm.label + \" Icon\"} src={icon}></img> */}\n </div>\n <span style={{ \"cursor\": \"pointer\" }}><small>{(_label) ? _itm.label : \"\"}</small></span>\n </Space>\n </a>\n\n\n )\n\n } else {\n\n return (\n\n <a style={{ \"color\": \"#1b1b1b\" }} onClick={() => linkOut(url, _index)} key={_index} rel=\"noopener\">\n <div className=\"shim\" />\n <div style={{ \"background\": \"url(\" + icon + \") no-repeat #fff center\", \"marginTop\": \"2px\", \"height\": \"17px\", \"width\": \"17px\", \"padding\": \"2px\", \"borderRadius\": \"2px\", \"backgroundColor\": \"#fff\" }}>\n\n </div>\n\n </a>\n\n\n )\n }\n\n\n }\n\n const drawLinks = () => {\n\n\n return (\n <>\n <div style={{ \"width\": \"270px\" }}>\n <Space wrap>\n {sites.map((item, _ind) => {\n return (<div key={_ind} style={{ \"width\": \"125px\" }}>{drawLink(item, _ind)}</div>)\n })}\n </Space>\n </div>\n </>\n )\n\n }\n\n\n\n const draw = () => {\n\n return (\n <>\n <Space size={0}>\n <div style={{ \"marginTop\": \"1px\" }}>{drawLink(sites[index], index, false)}</div>\n <Popover visible={open} onVisibleChange={(e) => setOpen(e)} placement=\"bottomLeft\" trigger={\"click\"} content={drawLinks()}><sup style={{ \"cursor\": \"pointer\" }}><CaretDownOutlined /></sup></Popover>\n </Space>\n\n </>\n )\n\n }\n\n\n return draw();\n\n\n}","import { Space } from \"antd\";\nimport React from \"react\";\n\nexport default function TitleOhOo(props) {\n\n // destructure data and available array\n const { data = {} } = props;\n const { available = [] } = data;\n\n // style boxes\n let _style = {\n backgroundColor: \"#ccf2cc\",\n padding: \"0px 5px\",\n width: \"30px\",\n textAlign: \"right\",\n height: \"22px\",\n color: \"#000\"\n }\n\n // draw onhand and onorder (hide if zero)\n const drawOhOo = (_available = {}) => {\n // destructure onhand and onorder (may not exist)\n const { onhand = 0, onorder = 0 } = _available;\n return (\n <Space size={0}>\n <div style={{ ..._style }}><small>{(onhand) ? onhand : \"\"}</small></div>\n <div style={{ ..._style, \"backgroundColor\": \"#ffe8bf\" }}><small>{(onorder) ? onorder : \"\"}</small></div>\n </Space>\n )\n }\n\n return (\n <Space direction=\"vertical\" size={0}>\n {available.map(item => {\n return drawOhOo(item)\n })}\n </Space>\n )\n}","import { Space } from \"antd\";\nimport React, { useState } from \"react\";\nimport { usePrefs } from \"../../utils/Prefs\";\nimport { useSession } from \"../../utils/Session\";\nimport { sumByKey } from \"../../utils/Utils\";\n\nexport default function TitleOrders(props) {\n\n const { isbn = \"\" } = props;\n const [session, setSession] = useSession();\n const [prefs, setPrefs] = usePrefs(); \n\n let items = session.cart.find(item => item.isbn === isbn);\n\n if(prefs.hasOwnProperty(\"cart\") && prefs.cart.length > 0){\n items = prefs.cart.find(item => item.isbn === isbn);\n }\n\n // No items - return nothing\n if (!items) { return (<></>); }\n\n // Join matching suppliers (regardless of group) and sum their quantities\n const unique = sumByKey(items.suppliers, \"location\", \"quantity\");\n\n // Green box with white text\n let _style = {\n backgroundColor: \"#3c8617\",\n color: \"#fff\",\n padding: \"0px 3px\",\n width: \"60px\",\n height: \"22px\",\n textAlign: \"center\",\n lineHeight: \"20px\"\n }\n\n // Draw as single box\n const drawOrder = (_location = \"\", _quantity = \"\") => {\n return (\n <div key={_location} style={{ ..._style }}><nobr><small>{_quantity} - {_location}</small></nobr></div>\n )\n }\n\n // Draw all boxes in a vertical stact\n return (\n <>\n <Space direction=\"vertical\" size={0}>\n {unique.map(item => {\n return drawOrder(item.location, item.quantity);\n })}\n </Space>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Row, Col, Card, Space, Typography, Button, Divider, message, Popconfirm } from \"antd\";\nimport { CopyOutlined, ShareAltOutlined, FilePdfOutlined, EditOutlined } from '@ant-design/icons';\nimport Checkbox from \"antd/lib/checkbox/Checkbox\";\nimport { apiCall } from \"../../utils/Api\";\nexport default function TitlePDF(props) {\n\n const {isbn} = props; \n\n //isbn=9780735237759&show_barcode=true&show_marketing=true\n\n const [showBarcode, setShowBarcode] = useState(false);\n const [showMarketing, setShowMarketing] = useState(false);\n const [visible, setVisible] = useState(false)\n\n const generatePDF = () =>{\n\n let _f = {\n show_barcode : showBarcode,\n show_marketing : showMarketing,\n isbn : isbn\n }\n\n apiCall(\"title/getPdf\", _f, (_status, _result) =>{\n if(_status){\n window.open(\"/pdf/\" + _result.progress_report_id, \"_blank\");\n setVisible(false);\n } else {\n message.error(_result.error);\n setVisible(false);\n }\n })\n\n\n }\n\n const drawForm = () => {\n return (\n <>\n <div style={{\"fontWeight\" : \"500\"}}>Create PDF</div>\n <Divider dashed style={{\"margin\" : \"10px 0px\"}} />\n <Space direction=\"vertical\">\n <Checkbox checked={showBarcode} onChange={() => setShowBarcode(!showBarcode)}>Show Barcode?</Checkbox>\n <Checkbox checked={showMarketing} onChange={() => setShowMarketing(!showMarketing)}>Show Marketing?</Checkbox>\n </Space>\n <div className=\"shim\" />\n \n </>\n )\n }\n\n return (\n <Popconfirm\n overlayClassName=\"popover-noicon\"\n title={drawForm()}\n onConfirm={() => generatePDF()}\n okText=\"Generate\"\n cancelText=\"Cancel\"\n onVisibleChange={(e) => setVisible(e)}\n icon={null}\n overlayStyle={{\"padding\" : \"0px\"}}\n >\n <Button onClick={() => setVisible(!visible)} style={{ \"width\": \"35px\" }} size=\"small\" className=\"mini-btn\" ><small><FilePdfOutlined /></small></Button>\n </Popconfirm>\n )\n\n\n\n}","import { Space, Tooltip } from \"antd\";\nimport React from \"react\";\nimport { bestsellerColor, futureColor } from \"../../utils/Utils\";\nexport default function TitleRank(props) {\n\n const { rank = {}, number_only = false, highlight = false } = props;\n\n let color = \"\";\n let place = 0;\n let r = 0;\n let is_future = rank.hasOwnProperty('future') ? true : false; \n\n if (is_future) {\n color = \"#2c7eb5\";\n place = rank.future;\n if (rank.future <= 100) { r = 1 } else if (rank.future <= 1000) { r = 2 } else if (rank.future <= 3000) { r = 3 } else if (rank.future <= 10000) { r = 4; }\n } else {\n color = \"#2cb58d\";\n place = rank.bestseller;\n if (rank.bestseller <= 1000) { r = 1; color = \"#b52c2c\"; } else if (rank.bestseller <= 10000) { r = 2; color = \"#d26a16\" } else if (rank.bestseller <= 30000) { r = 3; color = \"#c1aa2d\" } else if (rank.bestseller <= 100000) { r = 4; color = \"#73b52c\"; }\n\n }\n\n const lit = {\n height: \"10px\",\n width: \"3px\",\n backgroundColor: color,\n }\n\n const unlit = {\n height: \"10px\",\n width: \"3px\",\n backgroundColor: \"#eee\",\n }\n\n const drawIncs = (_r) =>{\n let ret = [5,4,3,2,1];\n return ret.map((item, index) =>{\n let _lit = ((item) >=_r);\n return <div key={index} style={(_lit) ? lit : unlit}></div>\n })\n }\n\n\n if(!place){\n return \"\";\n }\n\n if(number_only){\n\n if(highlight){\n color = \"inherit\";\n }\n return(<span style={{ \"color\": color }}>{place}</span>)\n }\n return (\n \n <div style={{ \"marginTop\": \"-3px\" }}>\n {/* <Tooltip title={\"#\" + place + \" in future releases\"}> */}\n <Space align=\"center\" style={{ \"fontSize\": \"14px\" }} size={2}>\n {drawIncs(r)}\n <div style={{ \"marginTop\": \"-3px\" }}> <span style={{ \"color\": color }}>#{place} {(is_future) ? \"in demand\" : \"in bestsellers\"}</span></div>\n </Space>\n {/* </Tooltip> */}\n </div>\n )\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Button, Space, Typography, Divider } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport Renderer from \"../Renderer\";\nimport ItemLayouts from \"../ItemLayouts\";\nimport LazyLoad from \"react-lazy-load\";\nimport TitleResults from \"./TitleResults\";\nimport { ucfirst } from \"../../utils/Utils\";\nexport default function TitleRelated2(props) {\n const { isbn, related_count = {\n previous_edition: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n },\n next_edition: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n },\n comparable_titles: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n },\n included_items: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n },\n included_in: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n },\n other_languages: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n },\n related: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n rows: [],\n count: 0,\n },\n other_titles: {\n fullname: \"\",\n shortname: \"\",\n shortkey: \"\",\n ids: [],\n count: 0,\n }\n }, drawComponent = () => { }, isbns = false, header = \"\", title = \"\" } = props;\n\n const getRelatedEditions = (_key) => {\n let _title = ucfirst(_key) + \" for: \" + title; \n drawComponent(<TitleResults name={_title} related={_key} isbn={isbn} />)\n }\n\n const drawButtonDisplay = (key) => {\n let button_display = related_count[key].short_name + \" (\" + related_count[key].count + \")\"; \n return button_display;\n }\n\n\n const drawButtons = () => {\n return Object.keys(related_count).map((key, index) => {\n if ( related_count[key].count > 0) {\n return (\n <Button \n key={index} \n size=\"small\" \n className=\"mini-btn\" \n onClick={() => getRelatedEditions(key)}>\n <small>\n {drawButtonDisplay(key)}\n </small>\n </Button>\n )\n }\n })\n }\n\n return (\n <Space size={3}>\n {drawButtons()}\n </Space>\n )\n}","import React, { useState } from \"react\";\nimport { Button, Input, Modal, Space, Typography, Tag, message, Divider } from \"antd\";\nimport { ShareAltOutlined, TwitterSquareFilled, FacebookFilled, TwitterOutlined, FacebookOutlined } from '@ant-design/icons'\nimport BroadcastMessage from \"../BroadcastMessage\";\nimport { XIcon } from \"../icons/XIcon\";\nexport default function TitleShare(props) {\n\n const { eisbn = \"\", title = \"\", isbn = \"\" } = props;\n\n\n let url = window.sitesettings.url + \"/item/\" + eisbn;\n let url2 = \"https://biz.bookmanager.com/purchasing/browse/filter/t/\" + isbn;\n let lastchar = window.sitesettings.url.substr(-1);\n // just in case it has a slash\n\n if (lastchar === \"/\") {\n url = window.sitesettings.url + \"item/\" + eisbn;\n }\n\n\n\n const CopyButton = (props) => {\n const { path = \"\" } = props\n const [copied, setCopied] = useState(false);\n\n const copyToClipboard = (_str) => {\n if (!navigator.clipboard) {\n message.error(\"Can't copy\");\n return;\n }\n navigator.clipboard.writeText(path);\n setCopied(true);\n setTimeout(() => {\n setCopied(false)\n }, 1000);\n }\n\n return (<Button onClick={(e) => copyToClipboard(e)} type={(copied ? \"default\" : \"primary\")}>{(copied) ? \"Copied\" : \"Copy\"}</Button>);\n\n }\n\n const [visible, setVisible] = useState(false);\n const drawModal = () => {\n return (\n <>\n <Modal destroyOnClose footer={null} onCancel={() => setVisible(false)} visible={visible}>\n <Typography.Title level={5}>Share</Typography.Title>\n <Typography.Paragraph>To share this title with <strong>customers</strong>, copy this link (e.g. Ctrl-C) and then paste it into an email.</Typography.Paragraph>\n\n <Space>\n <Input style={{ \"width\": \"400px\" }} defaultValue={url} />\n <CopyButton path={url} />\n </Space>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Typography.Paragraph>To share this title with other <strong>bookmanager stores</strong>, copy this link (e.g. Ctrl-C) and then paste it into an email.</Typography.Paragraph>\n <Space>\n <Input style={{ \"width\": \"400px\" }} defaultValue={url2} />\n <CopyButton path={url2} />\n </Space>\n\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <BroadcastMessage title=\"Send this title to staff member screen\" path={url2} />\n\n\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Typography.Paragraph>Share on social media</Typography.Paragraph>\n\n <Space size={5}>\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={\"https://twitter.com/share?url=\" + url}><Button type=\"text\" icon={<XIcon style={{ \"fontSize\": \"32px\", \"color\": \"#000\" }} />} /></a>\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={\"https://www.facebook.com/sharer/sharer.php?u=\" + url}><Button type=\"text\" icon={<FacebookFilled style={{ \"fontSize\": \"32px\", \"color\": \"#4267B2\" }} />} /></a>\n </Space>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n\n\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => setVisible(false)}>Cancel</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Modal>\n </>\n )\n }\n\n\n return (\n <>\n {drawModal()}\n <Button onClick={() => setVisible(true)} style={{ \"width\": \"36px\" }} size=\"small\" className=\"mini-btn\" ><small><ShareAltOutlined /></small></Button>\n </>\n )\n}","import { CloseOutlined, CopyOutlined, EditOutlined, EyeOutlined, FileImageOutlined, FilePdfOutlined, SelectOutlined, ShareAltOutlined } from '@ant-design/icons'\nimport { Badge, Button, Card, Col, Divider, message, Rate, Row, Space, Table, Tooltip, Typography } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\n\nimport nocover from \"../../media/no-cover.png\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport { usePrefs } from \"../../utils/Prefs\";\nimport Session, { useSession } from \"../../utils/Session\";\nimport { bestsellerColor, bmDate, containsISBN, drawQuantity, futureColor, getCanIcon, getFlag, handleTermSlash, isValidUPC, parseAuthors, parseRank, parseSubjects, parseSubjectsPlain, parseSubjectsWeird, ucfirst } from \"../../utils/Utils\";\nimport CatalogueCount from \"../catalogues/CatalogueCount\";\nimport Comments from \"../Comments\";\nimport EyeIcon from \"../icons/EyeIcon\";\nimport ItemHistory3 from \"../ItemHistory3\";\nimport ItemLayouts from \"../ItemLayouts\";\nimport ListCount from \"../lists/ListCount\";\nimport ListQuickPick from \"../lists/ListQuickPick\";\nimport Lists from \"../lists/Lists\";\nimport SalesCount from \"../lists/SalesCount\";\nimport SeriesCount from \"../lists/SeriesCount\";\nimport Order from \"../Order\";\nimport OrderBox from \"../OrderBox\";\nimport Overlay from \"../Overlay\";\nimport Peek from \"../Peek\";\nimport Pubstock from \"../Pubstock\";\nimport Renderer from \"../Renderer\";\nimport SupplementaryInfo from \"../SupplementaryInfo\";\nimport TestOrderBox from \"../TestOrderBox\";\nimport DigitalResources from \"./DigitalResources\"\nimport TitleDetails from \"./TitleDetails\";\nimport TitleExtras from \"./TitleExtras\";\nimport TitleImage2 from \"./TitleImage2\";\nimport TitleLinks from \"./TitleLinks\";\nimport TitleOhOo from \"./TitleOhOo\";\nimport TitleOrders from \"./TitleOrders\";\nimport TitlePDF from \"./TitlePDF\";\nimport TitleRank from \"./TitleRank\";\nimport TitleRelated from \"./TitleRelated\";\nimport TitleRelated2 from \"./TitleRelated2\";\nimport TitleResults from \"./TitleResults\";\nimport TitleShare from \"./TitleShare\";\n\n// Variants\n\nTitle.Summary = (props) => {\n return (<Title display=\"summary\" isbn={props.isbn} />)\n}\n\n\n\nexport default function Title(props) {\n\n const { \n data = {}, \n drawComponent = () => { } ,\n display = \"summary\", \n selected = \"\", \n setSelected = () => { },\n highlight = false,\n setHighlight = () => {},\n } = props;\n const [results, setResults] = useState({});\n const [loading, setLoading] = useState(false);\n const [session, setSession] = useSession();\n const [prefs, setPrefs] = usePrefs();\n //used to keep ListCount and ListQuickPick in sync for live updates\n const [myLists, setMyLists] = useState(props.data.my_lists);\n\n const parseExpand = () => {\n if (prefs) {\n let _ret = [];\n Object.keys(prefs).forEach(key => {\n if (prefs[key]) {\n _ret.push(key);\n }\n })\n return _ret;\n } else {\n return [];\n }\n }\n\n\n const [opened, setOpened] = useState(parseExpand())\n\n const toggleOpened = (_key) => {\n if (opened.includes(_key)) {\n setOpened([])\n } else {\n setOpened([_key]);\n }\n // if(opened.includes(_key)){\n // setOpened(opened.filter(item => item !== _key))\n // } else {\n // let m = [...opened];\n // m.push(_key);\n // setOpened(m)\n // }\n }\n\n const recheck = () => {\n if (JSON.stringify(parseExpand()) !== JSON.stringify(opened)) {\n setOpened(parseExpand())\n }\n }\n\n useEffect(recheck, [prefs])\n\n const [showPubstock, setShowPubstock] = useState(\"\");\n\n const { url_isbn } = useParams();\n\n const {\n authors = [],\n price = null,\n list_price_usa = null,\n list_price_can = null,\n rank = {\n bestseller: null,\n },\n binding = \"\",\n binding_code = \"\",\n release_date = null,\n conditions = [],\n is_forthcoming = false,\n available = [],\n canadian = false,\n title = \"\",\n subtitle = \"\",\n eisbn = \"\",\n isbn = (data.hasOwnProperty(\"isbn\")) ? data.isbn : props.isbn.toString(),\n upc = \"\",\n height = null,\n width = null,\n pages = null,\n publisher = \"\",\n has_libro_audiobook = true,\n audience = null,\n edition = \"\",\n edition_type = \"\",\n has_interiors = null,\n print_status = null,\n imprint = \"\",\n series = \"\",\n series_num = \"\",\n weight = null,\n carton_qty = null,\n sales_marketing = [],\n description = \"\",\n bio = [],\n comments = [],\n reviews = [],\n subjects = [],\n catalogues = [],\n illustrations = \"\",\n interiors = [],\n language = \"\",\n digital_resources = [],\n my_lists = false,\n catalogue_count = 0,\n sequence_num = 0,\n related_count,\n isbn_type = \"ean\",\n prefix_length = 7,\n can_edit = false,\n cover_image_cache = 0,\n interior_objects,\n cover_image_key = \"\"\n } = results;\n\n const [coversHighlight, setCoversHighlight] = useState(data.highlight)\n\n const getTitle = () => {\n if (data.hasOwnProperty(\"isbn\")) {\n setResults(data)\n setLoading(false);\n } else {\n let _isbn = props.isbn;\n if (url_isbn) {\n _isbn = url_isbn;\n }\n apiCall(\"title/getItem\", { isbn: _isbn }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setLoading(false)\n }\n })\n }\n }\n\n useEffect(getTitle, [isbn])\n\n\n const noCover = (e) => {\n e.target.src = nocover;\n e.target.onerror = null;\n }\n\n const [copied, setCopied] = useState(false);\n const copyToClipboard = (e) => {\n if (!navigator.clipboard) {\n message.error(\"Can't copy\");\n return;\n }\n navigator.clipboard.writeText(isbn);\n setCopied(true);\n setTimeout(() => {\n setCopied(false)\n }, 1000);\n }\n\n const [copied2, setCopied2] = useState(false);\n const copyToClipboard2 = (e) => {\n if (!navigator.clipboard) {\n message.error(\"Can't copy\");\n return;\n }\n navigator.clipboard.writeText(upc);\n setCopied2(true);\n setTimeout(() => {\n setCopied2(false)\n }, 1000);\n }\n\n const drawUPC = (_upc) => {\n if (isValidUPC(_upc)) {\n return \"UPC \" + _upc;\n } else {\n return \"VN \" + _upc;\n }\n }\n\n const drawISBN = (_isbn) => {\n if (isbn_type !== \"ean\") {\n return isbn_type.toUpperCase() + \" \" + _isbn;\n }\n // if (!containsISBN(_isbn)) {\n // // not an ISBN\n // if (isValidUPC(_isbn)) {\n // return \"UPC \" + _isbn;\n // } else {\n // return \"VN \" + _isbn;\n // }\n // }\n let ret = _isbn;\n if (_isbn.length === 13) {\n //ret = _isbn.substr(0, 3) + \"-\" + _isbn.substr(3, 1) + \"-\" + _isbn.substr(4, 3) + \"-\" + _isbn.substr(7, 5) + \"-\" + _isbn.substr(12, 1);\n }\n let link = <><a onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n }}>\n <Tooltip title=\"Click prefix to see titles with the same prefix\">\n <span\n style={{ \"fontFamily\": \"ApercuMono\" }}\n onClick={(e) => {\n\n if (e.ctrlKey) {\n drawComponent(<TitleResults term={ret.substr(0, prefix_length)} isbn={isbn} name={\"ISBN prefix search: \" + ret.substr(0, prefix_length)} drawComponent={drawComponent} />)\n } else {\n window.open(\"/purchasing/browse/filter/t/\" + ret.substr(0, prefix_length), \"_blank\");\n }\n }}>\n {ret.substr(0, prefix_length)}\n </span>\n </Tooltip>\n </a><span style={{ \"fontFamily\": \"ApercuMono\" }}>{ret.substr(prefix_length, ret.length)}</span></>\n return link;\n }\n\n\n const parseAuthorsLink = (_authors) => {\n if (!_authors || _authors.length === 0) { return \"\" }\n return _authors.map((_author, index) => {\n let flag = (_author.canadian && window.sitesettings.is_canadian);\n return (<nobr><Tooltip title=\"View other titles by this author in a new tab\"><a onClick={(e) => {\n e.stopPropagation();\n window.open(\"/purchasing/browse/filter/k/author/t/\" + _author.name)\n }} style={{ \"color\": \"#007EF5\", \"fontSize\": \"14px\" }} key={index}>{_author.name}{(flag && getCanIcon())} {(index !== _authors.length - 1) ? \", \" : \"\"} </a></Tooltip><Tooltip title=\"View other titles by this author below\"><Button style={{ \"height\": \"20px\", \"padding\": \"0px\", \"paddingRight\": \"5px\" }} size=\"small\" onClick={(e) => {\n e.stopPropagation();\n drawComponent(<TitleResults term={_author.name} type={\"author\"} isbn={isbn} name={\"Other titles for: \" + _author.name} drawComponent={drawComponent} />)\n }} type=\"link\"><EyeIcon /></Button></Tooltip></nobr>);\n });\n }\n\n\n const drawPrice = () => {\n\n let _can = (list_price_can > 0) ? \"$\" + list_price_can : \"\";\n let _us = (list_price_usa > 0) ? \"$\" + list_price_usa : \"\";\n\n // Add suffix if both exist..\n if (_can && _us) {\n _can = _can + \" CA\";\n _us = _us + \" US\"\n }\n\n // Draw CA first if store is Canadian, US first if store is American\n return (\n <div className=\"c2\" style={{ \"fontSize\": \"14px\", \"fontWeight\": \"normal\" }} >{binding}\n {(edition && <span style={{ \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}>{edition}</span>)}\n {((window.sitesettings.is_canadian && _can) && <div style={{ \"fontWeight\": \"600\" }}>{_can}</div>)}\n {((_us) && <div style={{ \"fontWeight\": \"600\" }}>{_us}</div>)}\n {((!window.sitesettings.is_canadian && _can) && <div style={{ \"fontWeight\": \"600\" }}>{_can}</div>)}\n\n </div>)\n\n }\n\n const drawSummary = () => {\n //potential refactor to be more clean, but these are for determining if a product has a value, and if it doesn't \n //it won't show anything related, like the pages string for the amount of pages when it's a bookmark.\n //Example: https://biz.bookmanager.com/purchasing/browse/filter/a/active/v/in_store/t/9780735354302\n const pagesValue = pages != null ? pages + \" pages | \" : null;\n const widthValue = width && height != null ? width + \"\\\" x \" : null;\n const heightValue = width && height != null ? height + \"\\\" | \" : null;\n const weightValue = weight != null ? weight + \"lbs | \" : null;\n const cartonValue = carton_qty != null ? \"Crtn: \" + carton_qty : null;\n\n return (\n <div style={{ \"padding\": \"0px\", \"paddingBottom\": \"0px\" }}>\n <Space size={13} align=\"start\" style={{ \"overflow\": \"hidden\" }}>\n <div style={{ \"maxWidth\": \"140px\" }}>\n <TitleImage2 highlight={highlight} cover_image_cache={cover_image_cache} interior_objects={interior_objects} isbn={isbn} cover_image_key={cover_image_key} eisbn={eisbn} has_interiors={has_interiors} />\n <div className=\"shim\" />\n <Space size={2}>\n <Button style={{ \"width\": \"140px\" }} type={(copied ? \"primary\" : \"default\")} onClick={() => copyToClipboard(isbn)} size=\"small\" className=\"mini-btn nofocus\" ><small> {(copied) ? \"Copied\" : drawISBN(isbn)}  <CopyOutlined style={{ \"fontSize\": \"9px\" }} /></small></Button>\n </Space>\n {(upc &&\n <div><Button style={{ \"width\": \"140px\" }} type={(copied2 ? \"primary\" : \"default\")} onClick={() => copyToClipboard2(upc)} size=\"small\" className=\"mini-btn nofocus\" ><small> {(copied2) ? \"Copied\" : drawUPC(upc)}  <CopyOutlined style={{ \"fontSize\": \"9px\" }} /></small></Button></div>\n )}\n\n <Space size={2}>\n <Overlay component={<div style={{ \"padding\": \"20px\" }}><TitleDetails drawComponent={drawComponent} isbn={isbn} /></div>}>\n <Button disabled={!can_edit} style={{ \"width\": \"35px\" }} size=\"small\" className=\"mini-btn\" ><small><EditOutlined /></small></Button>\n </Overlay>\n <TitlePDF isbn={isbn} />\n <TitleShare title={title} isbn={isbn} eisbn={eisbn} />\n <div style={{ \"textAlign\": \"center\", \"width\": \"30px\" }}>\n <TitleLinks authors={authors} isbn={isbn} />\n </div>\n </Space>\n\n\n </div>\n <div>\n <Typography.Title style={{ \"lineHeight\": \"19px\" }} level={5}>\n\n <span className=\"tag-btn\" >\n <span onClick={(e) => {\n e.stopPropagation();\n let _term = title;\n if (authors.length > 0) { _term += \" \" + authors[0].name; }\n window.open(\"/purchasing/browse/filter/v/related:\" + isbn + \"/t/\" + handleTermSlash(_term, true));\n }\n }>\n <Tooltip title=\"View other editions of this title in a new tab\"><a>{title}</a>{(subtitle) ? <small>: {subtitle}</small> : \"\"} </Tooltip><Tooltip title=\"View other editions of this title below\"><Button style={{ \"padding\": \"0px 0px\" }} size=\"small\" onClick={(e) => {\n e.stopPropagation();\n let _term = title;\n\n if (authors.length > 0) { _term += \" \" + authors[0].name; }\n drawComponent(<TitleResults term={handleTermSlash(_term, true)} isbn={isbn} name={\"Other Editions for: \" + title} drawComponent={drawComponent} />)\n }} type=\"link\"><EyeIcon /></Button></Tooltip>\n </span>\n\n </span>\n {/* <span style={{ \"color\": \"#666\", \"fontSize\": \"12px\", \"display\": \"block\" }}>{(subtitle) ? subtitle + \" | \" : \"\"}{binding}</span> */}\n <div style={{ \"marginTop\": \"-2px\" }}>{drawPrice()}</div>\n\n <div className=\"shim\" />\n <Space split={<small className=\"c2\"> </small>}>\n <conditional.true value={(release_date)}>\n <span className={(is_forthcoming) ? \"c2 futureColor\" : \"c2\"} style={{ \"fontSize\": \"14px\", \"display\": \"block\", \"fontWeight\": \"600\" }}>{moment(release_date * 1000).format(\"MMM Do, YYYY\")}</span>\n </conditional.true>\n <TitleRank rank={rank} />\n </Space>\n\n <small><span style={{ \"color\": \"#069\", \"fontSize\": \"14px\", \"display\": \"block\" }}>\n <Space size={0} wrap>{parseAuthorsLink(authors)}</Space>\n </span></small>\n\n {(series && <div className=\"c2\" style={{ \"fontSize\": \"14px\", \"display\": \"block\", \"fontWeight\": \"normal\", \"marginTop\": \"-2px\" }}>Series: <Tooltip title=\"View titles in this series in a new tab\"><a onClick={(e) => {\n\n window.open(\"/purchasing/browse/filter/z/\" + series, \"_blank\");\n\n }}>{series} {(series_num) ? \": (#\" + series_num.toString() + \")\" : \"\"}</a></Tooltip> <Tooltip title=\"View titles in this series below\"><Button style={{ \"padding\": \"0px 0px\" }} size=\"small\" onClick={(e) => {\n e.stopPropagation();\n drawComponent(<TitleResults type=\"series\" series={series} term={series} isbn={isbn} name={\"Other titles in series: \" + series} drawComponent={drawComponent} />)\n }} type=\"link\"><EyeIcon /></Button></Tooltip>\n\n </div>)}\n\n\n <div className=\"c2\" style={{ \"fontSize\": \"14px\", \"display\": \"block\", \"fontWeight\": \"normal\", \"marginTop\": \"-2px\" }}><span style={{ \"fontWeight\": \"600\" }}>{publisher}</span>{(imprint && (imprint !== publisher) && <em> | {imprint}</em>)}</div>\n {(audience && <span style={{ \"fontSize\": \"14px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}>Audience: {audience}</span>)}\n <div className=\"shim\" />\n <div className=\"shim\" />\n\n <div style={{ \"lineHeight\": \"12px\" }}>\n <div className=\"c2\" style={{ \"fontSize\": \"12px\", \"display\": \"block\", \"fontWeight\": \"normal\", \"lineHeight\": \"14px\" }}>{parseSubjects(subjects)}</div>\n <div className=\"shim\" />\n\n {(print_status && <span className=\"c2\" style={{ \"color\": \"#f12a46\", \"fontSize\": \"11px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}>{ucfirst(print_status)}</span>)}\n <span\n className=\"c2\"\n style={{ \"fontSize\": \"11px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}>\n {pagesValue} {widthValue} {heightValue} {weightValue} {cartonValue}\n </span>\n {(language && <span className=\"c2\" style={{ \"fontSize\": \"11px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}>Language: {language}</span>)}\n </div>\n </Typography.Title>\n <Space align=\"top\">\n <TitleOhOo data={data} />\n <TitleOrders isbn={isbn} />\n <Space wrap size={[3, 0]}>\n <ListCount title={title} my_lists={myLists} isbn={isbn} updateMyListsInParent={setMyLists} />\n <CatalogueCount count={catalogue_count} isbn={isbn} />\n <SalesCount title={title} data={sales_marketing} />\n <TitleRelated2 related_count={related_count} title={title} drawComponent={drawComponent} isbn={isbn} />\n <DigitalResources data={digital_resources} />\n {((series && series_num && binding) && <>\n <SeriesCount series_num={(series_num) ? \": (#\" + series_num.toString() + \")\" : \"\"} series={series} next={true} drawComponent={drawComponent} isbn={isbn} />\n <SeriesCount series_num={(series_num) ? \": (#\" + series_num.toString() + \")\" : \"\"} series={series} next={false} drawComponent={drawComponent} isbn={isbn} />\n </>)}\n </Space>\n </Space>\n\n {(my_lists && <div><ListQuickPick isbn={isbn} my_lists={myLists} updateMyListsInParent={setMyLists} /></div>)}\n\n </div>\n </Space>\n <TitleExtras data={data} isbn={isbn} />\n <conditional.true value={(showPubstock)}>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <Pubstock drawComponent={drawComponent} show_stores={(showPubstock === \"stores\")} isbn={isbn} />\n </div>\n </conditional.true>\n\n <SupplementaryInfo opened={opened} data={data} isbn={data.isbn || isbn} />\n </div>\n )\n }\n\n const drawPrint = () => {\n let image_path = \"https://cdn1.bookmanager.com/i/b?b=\" + eisbn;\n if (cover_image_key) {\n image_path = image_path + \"&b2b=\" + cover_image_key;\n }\n return (\n <div style={{ \"padding\": \"0px\", \"paddingBottom\": \"0px\", backgroundColor: (selected === isbn) ? \"#dcf4ff\" : \"#fff\" }}>\n <Space align=\"start\" style={{ \"overflow\": \"hidden\" }}>\n <div style={{ \"minWidth\": \"130px\" }}>\n <img className=\"shadow-large\" onError={(e) => noCover(e)} style={{ \"width\": \"130px\", \"marginRight\": \"10px\" }} src={image_path} alt=\"\" />\n <div className=\"shim\" />\n </div>\n <div style={{ \"minWidth\": \"265px\" }}>\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>{title}\n <span style={{ \"color\": \"#333\", \"fontSize\": \"14px\", \"display\": \"block\" }}>{subtitle}</span>\n <span style={{ \"color\": \"#069\", \"fontSize\": \"14px\", \"display\": \"block\", \"pointerEvents\": \"none\" }}><small>{parseAuthors(authors)}</small></span>\n <div className=\"shim\" />\n <span style={{ \"color\": \"#333\", \"fontSize\": \"13px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><strong>Subjects:</strong> {parseSubjectsPlain(subjects)}</span>\n <span style={{ \"color\": \"#333\", \"fontSize\": \"13px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><strong>ISBN:</strong> {isbn}</span>\n <span style={{ \"color\": \"#333\", \"fontSize\": \"13px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><strong>Publisher:</strong> {publisher}</span>\n <span style={{ \"color\": \"#333\", \"fontSize\": \"13px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><strong>Binding:</strong> {binding}</span>\n <span style={{ \"color\": \"#333\", \"fontSize\": \"13px\", \"display\": \"block\", \"fontWeight\": \"normal\" }}><strong>Date:</strong> {moment(release_date * 1000).format(\"MMMM Do, YYYY\")}</span>\n </Typography.Title>\n </div>\n </Space>\n </div>\n )\n }\n\n const drawRank = (_rank) => {\n if (_rank.hasOwnProperty(\"bestseller\")) {\n return <span style={{ \"color\": bestsellerColor }}>#{_rank.bestseller}</span>\n } else {\n return <span style={{ \"color\": futureColor }}>#{_rank.future}</span>\n }\n }\n\n const getPrices = () => {\n if (!Array.isArray(conditions)) {\n return;\n }\n //George (08Jun2023) Issue: web/issues#1892\n //Using values from both arrays to provide the right information when card/cover display is being used.\n return conditions.map((element, index) => {\n let { sell_price = 0, price = 0, code = \"\" } = element;\n let available_onhand, available_onorder;\n available.forEach((item, index) => {\n if (code === item.code) {\n available_onhand = item.onhand;\n available_onorder = item.onorder;\n }\n });\n\n return {\n // use sell price if exists\n price: (sell_price) ? sell_price : price,\n onhand: available_onhand,\n onorder: available_onorder,\n code: code,\n sale: (sell_price)\n }\n });\n }\n\n const getPeers = () => {\n if (conditions.length > 0) {\n if (conditions[0].hasOwnProperty(\"peer\")) {\n return ({\n onhand: conditions[0].peer.onhand,\n onorder: conditions[0].peer.onorder,\n onhandlocs: conditions[0].peer.onhandlocs,\n onorderlocs: conditions[0].peer.onorderlocs\n })\n } else {\n return (<></>)\n }\n }\n else {\n return (<></>)\n }\n }\n\n const drawTable = () => {\n let peers = getPeers();\n let prices = getPrices();\n return (\n <>\n <div style={{ \"border\": \"none\", \"0px\": \"0px\" }}>\n <Row align=\"middle\" style={{ \"textAlign\": \"right\", \"fontSize\": \"12px\", \"lineHeight\": \"16px\" }}>\n <Col span={6}>\n <div className=\"bcg2 bc c\" style={{ \"borderRight\": \"1px solid\", \"borderBottom\": \"1px solid\", \"height\": \"18px\", \"overflow\": \"hidden\" }}><small style={{ \"fontSize\": \"11px\", \"fontStyle\": \"italic\", \"paddingRight\": \"2px\" }}>Price</small></div>\n {prices.map((item, index) => {\n return <div className=\"bcg2 bc c\" key={index} style={{ \"fontStyle\": (index) ? \"italic\" : \"normal\", \"color\": (index) ? \"#189285\" : \"\", \"fontSize\": \"14px\", \"fontWeight\": \"bold\", \"borderRight\": \"1px solid\", \"textAlign\": \"right\", \"paddingRight\": \"2px\", \"height\": \"18px\", \"overflow\": \"hidden\", \"borderBottom\": \"1px solid\" }}>\n <small style={{ color: (item.sale) ? \"#f12a46\" : \"inherit\" }}>{(item.price > 0) ? item.code + \" $\" + item.price : \"\"}</small>\n </div>\n })}\n <div className=\"bcg2 bc c\" style={{ \"fontWeight\": \"bold\", \"borderRight\": \"1px solid\", \"cursor\": \"pointer\", \"paddingRight\": \"2px\", \"fontSize\": \"14px\" }}><small>{drawRank(rank)}</small></div>\n </Col>\n <Col span={5}>\n <div className=\"bcg2 bc c\" style={{ \"borderRight\": \"1px solid\", \"borderBottom\": \"1px solid\", \"height\": \"18px\", \"overflow\": \"hidden\" }}><small style={{ \"fontSize\": \"11px\", \"fontStyle\": \"italic\", \"paddingRight\": \"2px\" }}>aOH</small></div>\n {prices.map((item, index) => {\n return <div className=\"bcg2 bc c\" key={index} style={{ \"fontStyle\": (index) ? \"italic\" : \"normal\", \"fontSize\": \"14px\", \"fontWeight\": \"bold\", \"borderRight\": \"1px solid\", \"textAlign\": \"right\", \"paddingRight\": \"2px\", \"height\": \"18px\", \"overflow\": \"hidden\", \"borderBottom\": \"1px solid\", \"color\": (index) ? \"#189285\" : \"\", }}><small>{item.onhand || \"\"} </small></div>\n })}\n <div className=\"bcg2 bc c\" style={{ \"color\": \"#A52A2A\", \"fontWeight\": \"500\", \"borderRight\": \"1px solid\", \"cursor\": \"pointer\", \"paddingRight\": \"2px\" }}><small>{peers.onhand || \"\"}<sup>{peers.onhandlocs || \"\"}</sup> </small></div>\n </Col>\n <Col span={5}>\n <div className=\"bcg2 bc c\" style={{ \"borderBottom\": \"1px solid\", \"height\": \"18px\", \"overflow\": \"hidden\" }}><small style={{ \"fontSize\": \"11px\", \"fontStyle\": \"italic\", \"paddingRight\": \"2px\" }}>aOO</small></div>\n {prices.map((item, index) => {\n return <div className=\"bcg2 bc c\" key={index} style={{ \"fontStyle\": (index) ? \"italic\" : \"normal\", \"fontSize\": \"14px\", \"fontWeight\": \"bold\", \"textAlign\": \"right\", \"paddingRight\": \"2px\", \"height\": \"18px\", \"overflow\": \"hidden\", \"borderBottom\": \"1px solid\" }}><small>{item.onorder || \"\"} </small></div>\n })}\n <div className=\"bcg2 bc c\" style={{ \"fontWeight\": \"500\", \"color\": \"#A52A2A\", \"borderRight\": \"none\", \"cursor\": \"pointer\", \"paddingRight\": \"2px\" }}><small>{peers.onorder || \"\"}<sup>{peers.onorderlocs || \"\"} </sup></small></div>\n </Col>\n <Col span={8}>\n <div style={{ \"float\": \"right\" }}><Overlay width={750} component={<TestOrderBox setResults={setResults} wrap data={data} isbn={isbn} />}>{drawQuantity(isbn, session.cart)}</Overlay></div>\n </Col>\n </Row>\n </div>\n </>\n )\n }\n\n const [imgError, setImageError] = useState(false);\n\n const CardImage = (props) => {\n const ref = useRef();\n const scrollIntoViewWithOffset = (selector, offset) => {\n window.scrollTo({\n behavior: 'smooth',\n top:\n selector.getBoundingClientRect().top -\n document.body.getBoundingClientRect().top -\n offset,\n })\n }\n\n useEffect(() => {\n scrollIntoViewWithOffset(ref.current, 280);\n }, [])\n\n return (\n <>\n <div style={{ \"marginTop\": \"0px\", \"marginLeft\": \"0px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => drawComponent(null)} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div ref={ref}><Renderer close={true}><ItemLayouts cart_update={true} data={data} display=\"details2\" /></Renderer></div>\n </div>\n </>\n )\n }\n\n function badgeText(){\n return \"Highlighted\"\n }\n\n function drawBorder(){\n if(highlight){\n return {\n borderStyle: \"solid\",\n borderColor: \"#ff0099\",\n borderWidth: \"3px\",\n opacity: props.loading ? \"0.5\": \"1\",\n pointerEvents: props.loading ? \"none\" : \"inherit\",\n marginTop: sequence_num ? \"8px\" : \"0px\" \n }\n }\n return {\n opacity: props.loading ? \"0.5\": \"1\",\n pointerEvents: props.loading ? \"none\" : \"inherit\",\n marginTop: sequence_num ? \"8px\" : \"0px\" \n }\n }\n\n function drawCardBorder(){\n if(coversHighlight){\n return {\n top: \"-27px\", \n left: \"0px\", \n lineHeight: \"14px\", \n position: \"absolute\", \n padding: \"-5px\",\n borderStyle: \"solid\",\n borderColor: \"#ff0099\",\n borderWidth: \"3px\", \n \n backgroundColor: \"#ff0099\",\n }\n }\n return {\n top: \"-27px\", \n left: \"0px\", \n lineHeight: \"10px\", \n position: \"absolute\", \n padding: \"3px 4px\" \n }\n }\n\n\n const drawImage = () => {\n let image_path = \"https://cdn1.bookmanager.com/i/n?b=\" + eisbn\n if (cover_image_key) {\n image_path = image_path + \"&b2b=\" + cover_image_key;\n }\n if (cover_image_cache) {\n image_path = image_path + \"&cb=\" + cover_image_cache;\n }\n if (imgError) {\n return (\n <div onClick={() => drawComponent(<CardImage />)} style={{ \"backgroundImage\": `url(${nocover})`, \"backgroundSize\": \"contain\" }}>\n <div className=\"card-fallback\">\n <div><strong>{title}</strong></div>\n <div className=\"shim\" /><div className=\"shim\" />\n {(subtitle && <>\n <div style={{ \"lineHeight\": \"14px\" }}><small>{subtitle}</small></div>\n <div className=\"shim\" /><div className=\"shim\" />\n </>)}\n <div>{parseAuthors(authors, \"#000\")}</div>\n </div>\n </div>\n )\n }\n return (\n <img alt=\"example\" onClick={() => drawComponent(<CardImage />)} onError={(e) => setImageError(true)} src={image_path} />\n )\n }\n\n const drawCard = () => {\n return (\n <Card\n hoverable\n style={drawBorder()}\n key={isbn}\n size=\"small\"\n className={(selected === isbn) ? \"card-selected\" : \"card\"}\n cover={\n <>\n \n {drawImage()}\n <conditional.true value={sequence_num > 0}>\n <div style={drawCardBorder()}>\n <small className=\"c\" style={coversHighlight ? {\"color\": \"#FFFFFF\"} : null}><strong>{\"#\" + sequence_num} {coversHighlight ? \"Highlighted\" : \"\"}</strong></small>\n </div>\n </conditional.true>\n </>\n }\n >\n <Card.Meta description={\n <>\n <div style={{ \"fontSize\": \"15px\", \"lineHeight\": \"15px\" }} className=\"c\"><strong>{title}</strong>\n <div>{parseAuthors(authors, \"inherit\", \"12px\")}</div>\n </div>\n <div className=\"shim\" />\n <div className=\"c\" style={{ \"lineHeight\": \"16px\", \"fontWeight\": \"600\", \"display\": \"flex\", \"justifyContent\": \"space-between\" }}>\n <div>\n <small>{binding} | <span className=\"c\" style={{ \"color\": (is_forthcoming) ? futureColor : \"\" }}> {bmDate(release_date * 1000)}</span></small>\n </div>\n <small>${(window.sitesettings.is_canadian) ? price : list_price_usa} List</small>\n </div>\n <Divider style={{ \"margin\": \"5px 0px\" }} />\n {/* <div className=\"c2\" style={{ \"lineHeight\": \"14px\", \"fontWeight\": \"600\" }}><small>{publisher}</small></div>\n <div className=\"c2\" style={{ \"lineHeight\": \"14px\", \"fontWeight\": \"600\" }}><small>{parseSubjectsWeird(subjects)}</small></div> */}\n <div className=\"shim\" />\n {/* <div style={{ \"lineHeight\": \"14px\" }}><small>Peer : {drawPeers()}</small></div>\n <div style={{ \"lineHeight\": \"14px\" }}>{drawPrices()}</div> */}\n <div>{drawTable()}</div>\n </>\n } />\n </Card>\n )\n }\n\n switch (display) {\n case \"summary\":\n return drawSummary();\n case \"card\":\n return drawCard();\n case \"print\":\n return drawPrint();\n default:\n return drawSummary();\n }\n}","import React, { useState, useEffect } from \"react\";\nimport { Pagination, Typography, Table, Button } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport Title from \"../title/Title\";\nimport { bmDate } from \"../../utils/Utils\";\n\nexport default function InvoiceActivity(props) {\n\n const { invoice, invoice_is_supplier, close = () => {} } = props;\n const [results, setResults] = useState({ header_info: { is_supplier: false }, total: 0, rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [drawType, setDrawType] = useState(\"\")\n const [filters, setFilters] = useState({\n invoice: invoice,\n invoice_is_supplier: invoice_is_supplier,\n limit: 100,\n offset: 0,\n });\n\n const getCustomerActivity = () => {\n apiCall(\"activity/getByInvoice\", filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getCustomerActivity, [filters]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const columns = [\n\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\" },\n { title: <small>Price</small>, dataIndex: \"price\", key: \"price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n { title: <small>Discount</small>, dataIndex: \"discount\", key: \"discount\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n { title: <small>Profit</small>, dataIndex: \"profit_margin\", key: \"profit_margin\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n {\n title: <small>Title</small>, className : \"nowrap\", dataIndex: \"title\", key: \"title\"\n },\n { title: <small>ISBN</small>, dataIndex: \"isbn\", key: \"isbn\" },\n { title: <small>Cust PO</small>, dataIndex: \"customer_purchase_order\", key: \"customer_purchase_order\" },\n ]\n\n\n if (results.header_info.is_supplier) {\n // Supplier\n columns.unshift({ title: <small>Qty</small>, dataIndex: \"quantity\", key: \"quantity\" },)\n columns.push({ title: <small>Age</small>, dataIndex: \"age\", key: \"age\" })\n columns.push({ title: <small>Cancel</small>, dataIndex: \"cancel\", key: \"cancel\" })\n columns.push({ title: <small>Cashier</small>, dataIndex: \"cashier\", key: \"cashier\" })\n columns.push({ title: <small>Note</small>, dataIndex: \"note\", key: \"note\" })\n } else {\n // !Supplier\n columns.push({ title: <small>Class</small>, dataIndex: \"class\", key: \"class\" })\n columns.push({ title: <small>On hand</small>, dataIndex: \"onhand\", key: \"onhand\" })\n }\n\n\n const drawHeader = (_info) => {\n\n if (!_info) {\n _info = {}\n }\n\n const {\n customer_name = \"\",\n is_supplier = false,\n supplier_code = \"\",\n invoice = \"\",\n date = null\n } = _info;\n\n return (\n <div style={{\"borderBottom\" : \"1px solid #eee\"}}>\n <div style={{ \"borderBottom\": \"1px solid #eee\", \"textAlign\": \"left\", \"fontSize\": \"12px\", \"padding\": \"0px 8px\", \"height\": \"22px\", \"lineHeight\": \"20px\" }}>\n <strong style={{ \"color\": \"#1b1b1b\" }}><small>Invoice</small></strong>\n <div style={{ \"float\": \"right\" }}><Button onClick={() => close([])} className=\"tiny-btn\" size=\"small\" type=\"text\"><small style={{ \"fontSize\": \"10px\" }}><CloseOutlined /></small></Button></div>\n </div>\n\n <div style={{ \"padding\": \"8px\", \"paddingBottom\": \"0px\", \"marginTop\": \"-5px\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <conditional.true value={(invoice)}>\n <span style={{ \"color\": \"#069\", \"fontSize\": \"12px\", \"display\": \"block\" }}><strong>Invoice: {invoice}</strong></span>\n </conditional.true>\n <div className=\"shim\" />\n <conditional.true value={(supplier_code)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Supplier: </strong>{supplier_code}</span>\n </conditional.true>\n <conditional.true value={(date)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Date: </strong>{bmDate(date * 1000)}</span>\n </conditional.true>\n <conditional.true value={(customer_name)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Customer: </strong>{customer_name}</span>\n </conditional.true>\n </Typography.Paragraph>\n </div>\n </div>\n )\n }\n\n const drawChildTable = (_record) => {\n\n if (drawType === \"title\") {\n return <Title isbn={_record.isbn} />;\n }\n\n if (drawType === \"purchase_order\") {\n return (<></>);\n }\n\n return (<></>);\n }\n\n const expandCell = (_data, _type) => {\n setDrawType(_type);\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n if (_type === drawType) {\n setExpanded([]);\n } else {\n setExpanded([_data.key]);\n }\n }\n }\n\n if (loading) {\n return (<div style={{ \"margin\": \"-8px\" }}></div>);\n }\n\n return (\n <div style={{ \"margin\": \"0px\", backgroundColor: \"#fff\" }}>\n <Table\n title={() =>\n <>\n {drawHeader(results.header_info)}\n </>\n }\n size=\"small\"\n columns={columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n rowClassName={(record, index) => {\n return \"sales-\"+record.status;\n }}\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n footer={\n () => {\n <> </>\n // <conditional.true value={(results.total > 10)}>\n // <div style={{ \"margin\": \"-8px\", \"backgroundColor\": \"#fff\", \"padding\": \"8px 8px\", \"textAlign\": \"right\" }}>\n // <Pagination size=\"small\" current={((filters.offset / filters.limit) + 1)} onChange={(e, f) => setFilters({ ...filters, \"offset\": (e - 1) * f, \"limit\": f })} total={results.total} showSizeChanger />\n // </div>\n // </conditional.true>\n }\n\n }\n />\n </div>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Tag, Pagination, Space, Checkbox, Typography, Table, Button } from \"antd\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport Title from \"../title/Title\";\nimport InvoiceActivity from \"./InvoiceActivity\";\nimport { bmDate } from \"../../utils/Utils\";\n\nexport default function PurchaseActivity(props) {\n\n const { supplier, purchase_order, close = () =>{} } = props;\n const [results, setResults] = useState({ customer_info: {}, total: 0, rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [drawType, setDrawType] = useState(\"\")\n\n const [filters, setFilters] = useState({\n supplier: supplier,\n purchase_order: purchase_order,\n limit: 10,\n offset: 0,\n });\n\n const getCustomerActivity = () => {\n apiCall(\"activity/getByPurchaseOrder\", filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getCustomerActivity, [filters]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n\n\n const columns = [\n {\n title: <small>Date</small>, dataIndex: \"date\", key: \"date\", width: \"60px\", render: (e) => {\n return (e) ? bmDate(e * 1000) : \"\";\n }\n },\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\" },\n { title: <small>Qty</small>, dataIndex: \"quantity\", key: \"quantity\" },\n { title: <small>Inv.</small>, dataIndex: \"invoice_price\", key: \"invoice_price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n { title: <small>Discount</small>, dataIndex: \"invoice_discount\", key: \"invoice_discount\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n { title: <small>Profit</small>, dataIndex: \"profit_margin\", key: \"profit_margin\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n { title: <small>Sell</small>, dataIndex: \"sell_price\", key: \"sell_price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n {\n title: <small>Title</small>, className: \"nowrap\", dataIndex: \"title\", key: \"title\"\n },\n {\n title: <small>Invoice</small>, dataIndex: \"invoice_display\", key: \"invoice_display\", render: (e, f) => {\n return <a onClick={() => expandCell(f, \"invoice\")}>{e}</a>\n }\n },\n { title: <small>Clrk</small>, dataIndex: \"cashier\", key: \"cashier\" },\n { title: <small>Notes</small>, width: \"100px\", dataIndex: \"notes\", key: \"notes\" }\n ]\n\n\n\n const drawHeader = (_info = {}) => {\n\n\n const {\n is_bo = false,\n code_type = \"\",\n cancel_date = null,\n first_received = null,\n order = \"\",\n list_total = \"\",\n net_total = \"\",\n supplier_info = {\n supplier: \"\",\n created: null,\n name: \"\",\n address_1: \"\",\n address_2: \"\",\n city: \"\",\n province: \"\",\n country: \"\",\n email: \"\",\n phone: \"\",\n fax: \"\"\n }\n } = _info;\n\n\n\n return (\n\n <>\n\n <div className=\"bc\" style={{ \"borderBottom\": \"1px solid\", \"textAlign\": \"left\", \"fontSize\": \"12px\", \"padding\": \"0px 8px\", \"height\": \"22px\", \"lineHeight\": \"20px\" }}>\n <strong className=\"c\"><small>Purchase Activity</small></strong>\n <div style={{ \"float\": \"right\" }}><Button onClick={() => close([])} className=\"tiny-btn\" size=\"small\" type=\"text\"><small style={{ \"fontSize\": \"10px\" }}><CloseOutlined /></small></Button></div>\n </div>\n\n\n <div style={{ \"padding\": \"8px\", \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\" }}>\n <div style={{ \"float\": \"right\", \"textAlign\": \"right\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n\n <conditional.true value={(list_total)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Created: </strong>{bmDate(supplier_info.created * 1000)}</span>\n </conditional.true>\n <conditional.true value={(first_received)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>1st Received: </strong>{bmDate(first_received * 1000)}</span>\n </conditional.true>\n <conditional.true value={(cancel_date)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Cancel: </strong>{bmDate(cancel_date * 1000)}</span>\n </conditional.true>\n <conditional.true value={(list_total)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>List: </strong>${list_total}</span>\n </conditional.true>\n <conditional.true value={(net_total)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Net: </strong>${net_total}</span>\n </conditional.true>\n\n </Typography.Paragraph>\n </div>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <conditional.true value={(order)}>\n <span style={{ \"color\": \"#069\", \"fontSize\": \"12px\", \"display\": \"block\" }}><strong>Order {order}</strong></span>\n </conditional.true>\n <conditional.true value={(supplier_info.address_1 || supplier_info.address_2)}>\n {supplier_info.address_1} {supplier_info.address_2} <br />\n </conditional.true>\n <conditional.true value={(supplier_info.city)}>\n {supplier_info.city}, {supplier_info.province} {supplier_info.country} <br />\n </conditional.true>\n <conditional.true value={(supplier_info.phone)}>\n <conditional.true value={(supplier_info.phone)}><strong>{supplier_info.phone}</strong></conditional.true>\n </conditional.true>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>B/O: </strong>{(is_bo) ? \"Yes\" : \"No\"}</span>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Send: </strong>{code_type.toUpperCase()}</span>\n </Typography.Paragraph>\n </div>\n </>\n )\n }\n\n const drawChildTable = (_record) => {\n if (drawType === \"title\") {\n return <Title isbn={_record.isbn} />;\n }\n if (drawType === \"invoice\") {\n return <InvoiceActivity invoice_is_supplier={_record.invoice_is_supplier} invoice={_record.invoice_key} />\n }\n return (<></>);\n }\n\n const expandCell = (_data, _type) => {\n setDrawType(_type);\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n if (_type === drawType) {\n setExpanded([]);\n } else {\n setExpanded([_data.key]);\n }\n }\n }\n\n\n if (loading) {\n return (<div style={{ \"margin\": \"-8px\" }}></div>);\n }\n\n return (\n <div style={{ \"margin\": \"0px\", backgroundColor: \"#fff\" }}>\n <Table\n title={() =>\n <>\n {drawHeader(results.header_info)}\n <div className=\"shim\" />\n </>\n }\n size=\"small\"\n columns={columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n footer={\n () =>\n <> </>\n // <conditional.true value={(results.total > 10)}>\n // <div style={{ \"margin\": \"-8px\", \"backgroundColor\": \"#fff\", \"padding\": \"8px 8px\", \"textAlign\": \"right\" }}>\n // <Pagination size=\"small\" current={((filters.offset / filters.limit) + 1)} onChange={(e, f) => setFilters({ ...filters, \"offset\": (e - 1) * f, \"limit\": f })} total={results.total} showSizeChanger />\n // </div>\n // </conditional.true>\n }\n />\n </div>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Divider, Typography, Table, Button, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport Title from \"../title/Title\";\nimport { bmDate } from \"../../utils/Utils\";\nimport Paginate from \"../Paginate\";\n\nexport default function InvoiceActivity2(props) {\n\n const { chain_number = \"\", invoice, invoice_is_supplier = true, close = () => { } } = props;\n const [results, setResults] = useState({ header_info: { is_supplier: false }, total: 0, rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [drawType, setDrawType] = useState(\"\")\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 10, offset: 0 });\n const [filters, setFilters] = useState({\n invoice: invoice,\n invoice_is_supplier: invoice_is_supplier,\n limit: 100,\n offset: 0,\n });\n\n const getCustomerActivity = () => {\n\n let _filters = { ...filters }\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n\n if(chain_number !== \"\"){\n _filters.chain_number = chain_number;\n }\n\n apiCall(\"activity/getByInvoice\", _filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getCustomerActivity, [paginate]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const columns = [\n\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\" },\n { title: <small>Price</small>, dataIndex: \"price\", key: \"price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n { title: <small>%</small>, dataIndex: \"discount\", key: \"discount\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n { title: <small>Profit</small>, dataIndex: \"profit_margin\", key: \"profit_margin\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n {\n title: <small>Title</small>, width: \"200px\", className: \"nowrap\", dataIndex: \"title\", key: \"title\", render: (e, f) => {\n return (<a onClick={() => { window.open(\"/purchasing/browse/filter/t/\" + f.isbn, \"_blank\") }}>{e}</a>)\n }\n },\n { title: <small>ISBN</small>, dataIndex: \"isbn\", key: \"isbn\" },\n { title: <small>Cust PO</small>, dataIndex: \"customer_purchase_order\", key: \"customer_purchase_order\" },\n { title: <small>PO</small>, dataIndex: \"purchase_order\", key: \"purchase_order\" },\n ]\n\n\n if (results.header_info.is_supplier) {\n // Supplier\n columns.unshift({ title: <small>Qty</small>, dataIndex: \"quantity\", key: \"quantity\" },)\n columns.push({ title: <small>Age</small>, dataIndex: \"age\", key: \"age\" })\n columns.push({ title: <small><nobr>Cancels In</nobr></small>, dataIndex: \"cancel\", key: \"cancel\" })\n columns.push({ title: <small>Clrk</small>, dataIndex: \"cashier\", key: \"cashier\" })\n columns.push({ title: <small>Note</small>, width: \"200px\", dataIndex: \"note\", key: \"note\" })\n } else {\n // !Supplier\n columns.push({ title: <small>Class</small>, dataIndex: \"class\", key: \"class\" })\n columns.push({ title: <small>On hand</small>, dataIndex: \"onhand\", key: \"onhand\" })\n }\n\n\n const [browseLoading, setBrowseLoading] = useState(false);\n\n const linkOut = (_id) => {\n window.open(\"/purchasing/browse/filter/x/\" + _id + \"/v/sequence\", \"_blank\");\n }\n\n\n const viewInBrowse = () => {\n setBrowseLoading(true)\n\n let obj = {\n invoice : invoice,\n invoice_is_supplier : invoice_is_supplier\n }\n\n if(chain_number !== \"\"){\n obj.chain_number = chain_number;\n }\n\n apiCall(\"activity/getCacheKeyByInvoice\", obj, (_status, _result) => {\n if (_status) {\n // link to browse in a new tab\n linkOut(_result.id)\n\n } else {\n message.error(_result.error);\n }\n setBrowseLoading(false)\n })\n }\n\n const drawHeader = (_info) => {\n\n if (!_info) {\n _info = {}\n }\n\n const {\n customer_name = \"\",\n is_supplier = false,\n supplier_code = \"\",\n invoice = \"\",\n date = null\n } = _info;\n\n return (\n\n\n <div>\n <div style={{ \"float\": \"right\" }}><Button loading={browseLoading} onClick={() => viewInBrowse()} size=\"small\" type=\"primary\"><small>Browse titles</small></Button></div>\n <div style={{ \"padding\": \"0px 5px\", \"paddingBottom\": \"0px\", \"marginTop\": \"-5px\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <conditional.true value={(invoice)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Invoice: <strong>{invoice}</strong></span>\n </conditional.true>\n <conditional.true value={(supplier_code)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}>Supplier:<strong> {supplier_code}</strong></span>\n </conditional.true>\n <conditional.true value={(date)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}>Date: <strong>{bmDate(date * 1000)}</strong></span>\n </conditional.true>\n <conditional.true value={(customer_name)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}>Customer: <strong>{customer_name}</strong></span>\n </conditional.true>\n </Typography.Paragraph>\n </div>\n\n </div>\n )\n }\n\n const drawChildTable = (_record) => {\n\n if (drawType === \"title\") {\n return <Title isbn={_record.isbn} />;\n }\n\n if (drawType === \"purchase_order\") {\n return (<></>);\n }\n\n return (<></>);\n }\n\n const expandCell = (_data, _type) => {\n setDrawType(_type);\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n if (_type === drawType) {\n setExpanded([]);\n } else {\n setExpanded([_data.key]);\n }\n }\n }\n\n\n return (\n <div style={{ \"padding\": \"20px\", \"margin\": \"0px\" }}>\n\n <Typography.Title level={5}>Invoice</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n {drawHeader(results.header_info)}\n\n <div className=\"bc\" style={{ \"border\": \"1px solid\" }}>\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n <Table\n size=\"small\"\n loading={loading}\n columns={columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n rowClassName={(record, index) => {\n return \"sales-\" + record.status;\n }}\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n </div>\n </div>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Tag, Pagination, Space, Checkbox, Typography, Table, Button, Divider, Spin, Descriptions } from \"antd\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport Title from \"../title/Title\";\nimport InvoiceActivity from \"./InvoiceActivity\";\nimport { addCommas, bmDate } from \"../../utils/Utils\";\nimport Paginate from \"../Paginate\";\nimport InvoiceActivity2 from \"./InvoiceActivity2\";\nimport Overlay from \"../Overlay\";\n\nexport default function PurchaseActivity2(props) {\n \n const { chain_number = \"\", invoice_is_return = false, supplier, purchase_order, close = () => { } } = props;\n const [results, setResults] = useState({ customer_info: {}, total: 0, rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [drawType, setDrawType] = useState(\"\")\n\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 10, offset: 0 });\n\n const [filters, setFilters] = useState({\n supplier: supplier,\n purchase_order: purchase_order,\n limit: 1000,\n offset: 0,\n invoice_is_return : invoice_is_return,\n });\n\n const getCustomerActivity = () => {\n\n let _filters = { ...filters }\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n\n if(chain_number !== \"\"){\n _filters.chain_number = chain_number;\n }\n\n setLoading(true);\n apiCall(\"activity/getByPurchaseOrder\", _filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getCustomerActivity, [paginate]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n\n\n const columns = [\n {\n title: <small>Date</small>, dataIndex: \"date\", key: \"date\", width: \"60px\", render: (e) => {\n return (e) ? <nobr>{bmDate(e * 1000)}</nobr> : \"\";\n }\n },\n { title: <small>Status</small>, width: 50, dataIndex: \"status\", key: \"status\" },\n { title: <small>Qty</small>, width: 40, dataIndex: \"quantity\", key: \"quantity\" },\n { title: <small>Inv.</small>, width: 60, dataIndex: \"invoice_price\", key: \"invoice_price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n { title: <small>Discount</small>, width: 60, dataIndex: \"invoice_discount\", key: \"invoice_discount\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n { title: <small>Profit</small>, width: 50, dataIndex: \"profit_margin\", key: \"profit_margin\", render: (e) => { return (e) ? e.toString() + \"%\" : \"\" } },\n { title: <small>Sell</small>, width: 60, dataIndex: \"sell_price\", key: \"sell_price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n {\n title: <small>Title</small>, className: \"nowrap\", dataIndex: \"title\", key: \"title\"\n },\n {\n title: <small>Invoice</small>, dataIndex: \"invoice_display\", key: \"invoice_display\", render: (e, f) => {\n\n // return (e) ? e : \"\"\n return (e && f.invoice) ? <nobr><Overlay component={<InvoiceActivity2 chain_number={f.chain_number} invoice_is_supplier={f.invoice_is_supplier} close={setExpanded} invoice={f.invoice} />}><a>{e}</a></Overlay></nobr> : <>{e}</>;\n \n }\n },\n { title: <small>Clrk</small>, width: 50, dataIndex: \"cashier\", key: \"cashier\" },\n { title: <small>Notes</small>, width: \"200px\", dataIndex: \"notes\", key: \"notes\" }\n ]\n\n\n\n const drawHeader = (_info = {}) => {\n\n\n const {\n\n is_bo = false,\n code_type = \"\",\n cancel_date = null,\n first_received = null,\n order = \"\",\n list_total = \"\",\n net_total = \"\",\n stage = \"\",\n sent_ts = null,\n bo_sta = \"\",\n special_orders = 0,\n units = \"\",\n sell_total = \"\",\n net_cost = \"\",\n profit_margin = \"\",\n vendor_order_min = \"\",\n supplier_info = {\n supplier: \"\",\n created: null,\n name: \"\",\n address_1: \"\",\n address_2: \"\",\n city: \"\",\n province: \"\",\n country: \"\",\n email: \"\",\n phone: \"\",\n fax: \"\"\n }\n } = _info;\n\n\n\n return (\n\n <>\n <div style={{ \"padding\": \"0px 5px\", \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\" }}>\n <div style={{ \"float\": \"right\", \"textAlign\": \"right\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n\n <conditional.true value={(special_orders)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Special orders: <strong>{special_orders}</strong></span>\n </conditional.true>\n\n <conditional.true value={(units)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Units: <strong>{units}</strong></span>\n </conditional.true>\n\n <conditional.true value={(sell_total)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Sell total: <strong>{(sell_total) ? \"$\" + addCommas(sell_total) : \"\"}</strong></span>\n </conditional.true>\n\n <conditional.true value={(list_total)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>List Total: <strong>{(list_total) ? \"$\" + addCommas(list_total): \"\"}</strong></span>\n </conditional.true>\n\n <conditional.true value={(net_cost)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Net Cost: <strong>{(net_cost) ? \"$\" + addCommas(net_cost) : \"\"}</strong></span>\n </conditional.true>\n\n <conditional.true value={(vendor_order_min)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Vendor Order Min: <strong>{vendor_order_min}</strong></span>\n </conditional.true>\n\n {/* \n <conditional.true value={(list_total)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Created: </strong>{bmDate(supplier_info.created * 1000)}</span>\n </conditional.true>\n <conditional.true value={(first_received)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>1st Received: </strong>{bmDate(first_received * 1000)}</span>\n </conditional.true>\n <conditional.true value={(cancel_date)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Cancel: </strong>{bmDate(cancel_date * 1000)}</span>\n </conditional.true>\n <conditional.true value={(list_total)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>List: </strong>${list_total}</span>\n </conditional.true>\n <conditional.true value={(net_total)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Net: </strong>${net_total}</span>\n </conditional.true> */}\n\n </Typography.Paragraph>\n </div>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <conditional.true value={(supplier_info.supplier)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Vendor code: <strong>{supplier_info.supplier}</strong></span>\n </conditional.true>\n <conditional.true value={(stage)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Status: <strong>{stage}</strong></span>\n </conditional.true>\n\n <conditional.true value={(sent_ts)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Sent on: <strong>{bmDate(sent_ts * 1000)}</strong></span>\n </conditional.true>\n\n <conditional.true value={(cancel_date)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>Cancel date: <strong>{bmDate(cancel_date * 1000)}</strong></span>\n </conditional.true>\n\n <conditional.true value={(bo_sta)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>B/O status: <strong>{bo_sta}</strong></span>\n </conditional.true>\n\n <conditional.true value={(first_received)}>\n <span style={{ \"fontSize\": \"12px\", \"display\": \"block\" }}>First received: <strong>{bmDate(first_received * 1000)}</strong></span>\n </conditional.true>\n\n\n\n\n {/* <conditional.true value={(supplier_info.address_1 || supplier_info.address_2)}>\n {supplier_info.address_1} {supplier_info.address_2} <br />\n </conditional.true>\n <conditional.true value={(supplier_info.city)}>\n {supplier_info.city}, {supplier_info.province} {supplier_info.country} <br />\n </conditional.true>\n <conditional.true value={(supplier_info.phone)}>\n <conditional.true value={(supplier_info.phone)}><strong>{supplier_info.phone}</strong></conditional.true>\n </conditional.true>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>B/O: </strong>{(is_bo) ? \"Yes\" : \"No\"}</span>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Send: </strong>{code_type.toUpperCase()}</span> */}\n </Typography.Paragraph>\n \n </div> \n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </>\n )\n }\n\n const drawChildTable = (_record) => {\n if (drawType === \"title\") {\n return <Title isbn={_record.isbn} />;\n }\n if (drawType === \"invoice\") {\n return <InvoiceActivity invoice_is_supplier={_record.invoice_is_supplier} invoice={_record.invoice_key} />\n }\n return (<></>);\n }\n\n const expandCell = (_data, _type) => {\n setDrawType(_type);\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n if (_type === drawType) {\n setExpanded([]);\n } else {\n setExpanded([_data.key]);\n }\n }\n }\n\n\n\n\n return (\n <div style={{ \"padding\": \"20px\", \"margin\": \"0px\" }}>\n\n <Typography.Title level={5}>PO# {purchase_order}</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n {drawHeader(results.header_info)}\n <div className=\"bc\" style={{ \"border\": \"1px solid\" }}>\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n <Table\n loading={loading}\n\n size=\"small\"\n columns={columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n\n />\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n </div>\n </div>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Tag, Pagination, Space, Checkbox, Typography, Table, Button } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport PurchaseActivity from \"./PurchaseActivity\";\nimport { bmDate, getFilterSet, saveFilterSet } from \"../../utils/Utils\";\nimport Overlay from \"../Overlay\";\nimport PurchaseActivity2 from \"./PurchaseActivity2\";\n\nexport default function SupplierActivity(props) {\n\n const { supplier, close = () => { } } = props;\n const [results, setResults] = useState({ customer_info: {}, total: 0, rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n\n\n const initFilters = {\n supplier: supplier,\n limit: 100,\n offset: 0,\n orders: false,\n returns: false,\n recent: false\n }\n\n const [filters, setFilters] = useState(initFilters);\n\n\n const saveFilters = (_obj) =>{\n\n \n setFilters(_obj);\n }\n\n const getCustomerActivity = () => {\n apiCall(\"activity/getBySupplier\", filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getCustomerActivity, [filters]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const columns = [\n {\n title: <small>Date</small>, dataIndex: \"date\", key: \"date\", render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do YYYY\") : \"\";\n }\n },\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\" },\n {\n title: <small>Purchase Order</small>, dataIndex: \"purchase_order\", key: \"purchase_order\", render: (e, f) => {\n \n return(<Overlay component={<PurchaseActivity2 chain_number={f.chain_number} close={setExpanded} supplier={results.supplier_info.supplier} purchase_order={f.purchase_order} />}><a>{e}</a></Overlay>)\n\n // return <a onClick={() => expandCell(f)}>{e}</a>\n }\n },\n { title: <small>Items</small>, dataIndex: \"items\", key: \"items\" },\n { title: <small>Note</small>, className: \"nowrap\", dataIndex: \"note\", key: \"note\" }\n ]\n\n const drawFilters = () => {\n return (\n <div className=\"bc bcg2\" style={{ \"margin\": \"0px\", \"padding\": \"2px 5px\", \"borderTop\": \"1px solid\", \"borderBottom\": \"1px solid\" }}>\n <Checkbox className=\"mini-checkbox\" checked={filters.recent} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"recent\": e.target.checked })} />\n <small> Show last 60 days only</small>\n\n <div style={{ \"float\": \"right\" }}>\n <Space size={7}>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={(!filters.orders && !filters.returns)} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"orders\": false, \"returns\": false })} />\n <small> All</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.orders} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"orders\": e.target.checked })} />\n <small> Orders</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.returns} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"returns\": e.target.checked })} />\n <small> Returns</small>\n </div>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n )\n }\n\n const drawContact = (_info = {}) => {\n\n const {\n supplier = \"\",\n created = null,\n name = \"\",\n address_1 = \"\",\n address_2 = \"\",\n city = \"\",\n province = \"\",\n country = \"\",\n email = \"\",\n phone = \"\",\n phone_2 = \"\",\n fax = \"\",\n } = _info;\n\n return (\n <>\n <div className=\"bc\" style={{ \"borderBottom\": \"1px solid\", \"textAlign\": \"left\", \"fontSize\": \"12px\", \"padding\": \"0px 8px\", \"height\": \"22px\", \"lineHeight\": \"20px\" }}>\n <strong className=\"c\"><small>Supplier</small></strong>\n <div style={{ \"float\": \"right\" }}><Button onClick={() => close([])} className=\"tiny-btn\" size=\"small\" type=\"text\"><small style={{ \"fontSize\": \"10px\" }}><CloseOutlined /></small></Button></div>\n </div>\n\n <div style={{ \"padding\": \"8px\", \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\" }}>\n <div style={{ \"float\": \"right\", \"textAlign\": \"right\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"11px\" }}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Created: </strong>{bmDate(created * 1000)}</span>\n </Typography.Paragraph>\n </div>\n <Typography.Paragraph style={{ \"fontSize\": \"11px\" }}>\n <conditional.true value={(name)}>\n <span style={{ \"color\": \"#069\", \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>{name}</strong></span>\n </conditional.true>\n <conditional.true value={(email)}>\n <div style={{ \"marginTop\": \"-2px\" }}><a href={\"mailto:\" + email}>{email}</a></div>\n <div className=\"shim\"></div>\n </conditional.true>\n <conditional.true value={(address_1 || address_2)}>\n {address_1} {address_2} <br />\n </conditional.true>\n <conditional.true value={(city)}>\n {city}, {province} {country} <br />\n </conditional.true>\n <conditional.true value={(phone || phone_2)}>\n <conditional.true value={(phone && phone_2)}>\n <conditional.true value={(phone)}><strong>{phone}</strong></conditional.true> -\n <conditional.true value={(phone_2)}><strong> {phone_2}</strong></conditional.true>\n </conditional.true>\n <conditional.true value={!(phone && phone_2)}>\n <conditional.true value={(phone)}><strong>{phone}</strong></conditional.true>\n <conditional.true value={(phone_2)}><strong> {phone_2}</strong></conditional.true>\n </conditional.true>\n </conditional.true>\n </Typography.Paragraph>\n </div>\n </>\n )\n }\n\n\n const drawChildTable = (_record) => {\n\n return (<div className=\"hideHover\" style={{ \"marginLeft\": \"-8px\", \"marginRight\": \"-3px\", \"marginTop\": \"-4px\", \"marginBottom\": \"-4px\" }}><PurchaseActivity close={setExpanded} supplier={supplier} purchase_order={_record.purchase_order} /></div>);\n }\n\n const expandCell = (_data, _type) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n if (loading) {\n return (<div style={{ \"margin\": \"0px\" }}></div>);\n }\n\n return (\n <div style={{ \"margin\": \"0px\", backgroundColor: \"#fff\" }}>\n <Table\n title={() =>\n <>\n {drawContact(results.supplier_info)}\n <div className=\"shim\" /><div className=\"shim\" />\n {drawFilters()}\n </>\n }\n size=\"small\"\n columns={columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n expandedRowKeys={expanded}\n rowClassName={(record, index) => {\n return \"sales-\" + record.status;\n }}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n footer={\n () =>\n <> </>\n // <conditional.true value={(results.total > 10)}>\n // <div style={{ \"margin\": \"-8px\", \"backgroundColor\": \"#fff\", \"padding\": \"8px 8px\", \"textAlign\": \"right\" }}>\n // <Pagination size=\"small\" current={((filters.offset / filters.limit) + 1)} onChange={(e, f) => setFilters({ ...filters, \"offset\": (e - 1) * f, \"limit\": f })} total={results.total} showSizeChanger />\n // </div>\n // </conditional.true>\n }\n />\n </div>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Tag, Pagination, Space, Checkbox, Typography, Table, Button, Row, Col, Card, Divider } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport Title from \"../title/Title\";\nimport InvoiceActivity from \"./InvoiceActivity\";\nimport SupplierActivity from \"./SupplierActivity\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport { bmDate } from \"../../utils/Utils\";\nimport Paginate from \"../Paginate\";\n\nexport default function CustomerActivity2(props) {\n\n\n const { customer_ship_to, chain_number = \"\", close = () => { } } = props;\n const [results, setResults] = useState({ customer_info: {}, total: 0, rows: [] });\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 10, offset: 0 });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [drawType, setDrawType] = useState(\"\");\n const [more, setMore] = useState(false)\n\n const [filters, setFilters] = useState({\n ship_to: customer_ship_to,\n limit: 100,\n offset: 0,\n orders: false,\n returns: false,\n sales: false,\n recent: false\n });\n\n\n const convertFBPoints = (_int) => {\n let ret;\n if (isNaN(_int)) {\n ret = \"N/A\";\n } else {\n ret = (_int / 100).toFixed(2);\n ret = \"$\" + ret.toString();\n }\n\n return ret;\n }\n\n const getCustomerActivity = () => {\n\n let _filters = { ...filters }\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n\n if(chain_number !== \"\"){\n _filters.chain_number = chain_number;\n }\n apiCall(\"activity/getByShipto\", _filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getCustomerActivity, [filters, paginate]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n\n const columns = [\n {\n title: <small>Date</small>, dataIndex: \"date\", key: \"date\", render: (e) => {\n return (e) ? bmDate(e * 1000) : \"\";\n }\n },\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\" },\n { title: <small>Qty</small>, dataIndex: \"quantity\", key: \"quantity\" },\n { title: <small>Price</small>, dataIndex: \"price\", key: \"price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n { title: <small>%</small>, dataIndex: \"discount\", key: \"discount\", render : (e) => (e) ? e : \"\"},\n { title: <small>PM</small>, dataIndex: \"profit_margin\", key: \"profit_margin\", render : (e) => (e) ? e : \"\"},\n {\n title: <small>Title</small>, className: \"nowrap\", dataIndex: \"title\", key: \"title\", render: (e, f) => {\n return (<a onClick={() => { window.open(\"/purchasing/browse/filter/t/\" + f.isbn, \"_blank\") }}>{e}</a>)\n }\n },\n {\n title: <small>Supp</small>, dataIndex: \"supplier\", key: \"supplier\"\n },\n {\n title: <small>P/O</small>, dataIndex: \"purchase_order\", key: \"purchase_order\"\n },\n { title: <small>Cust PO</small>, dataIndex: \"customer_purchase_order\", key: \"customer_purchase_order\" },\n {\n title: <small>Invoice</small>, dataIndex: \"invoice_display\", key: \"invoice_display\"\n },\n { title: <small>Clrk</small>, dataIndex: \"cashier\", key: \"cashier\" }\n ]\n\n const drawFilters = () => {\n return (\n <div className=\"bc\" style={{ \"margin\": \"0px\", \"padding\": \"2px 5px\", \"borderTop\": \"1px solid\", \"borderBottom\": \"1px solid\" }}>\n <Checkbox className=\"mini-checkbox\" checked={filters.recent} onChange={(e) => setFilters({ ...filters, \"offset\": 0, \"recent\": e.target.checked })} />\n <small> Show last 60 days only</small>\n <div style={{ \"float\": \"right\" }}>\n <Space size={7}>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={(!filters.orders && !filters.returns && !filters.sales)} onChange={(e) => setFilters({ ...filters, \"offset\": 0, \"orders\": false, \"returns\": false, \"sales\": false })} />\n <small> All</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.orders} onChange={(e) => setFilters({ ...filters, \"offset\": 0, \"orders\": e.target.checked })} />\n <small> Orders</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.returns} onChange={(e) => setFilters({ ...filters, \"offset\": 0, \"returns\": e.target.checked })} />\n <small> Returns</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.sales} onChange={(e) => setFilters({ ...filters, \"offset\": 0, \"sales\": e.target.checked })} />\n <small> Sales</small>\n </div>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n )\n }\n\n const drawContact = (_info = {}) => {\n const {\n ship_to = \"\",\n created = null,\n last_activity = null,\n discount = null,\n frequent_buyer = false,\n frequent_buyer_points = 0,\n customer_type = \"\",\n name = \"\",\n attn = \"\",\n address_1 = \"\",\n address_2 = \"\",\n city = \"\",\n province = \"\",\n country = \"\",\n email = \"\",\n phone = \"\",\n phone_2 = \"\",\n fax = \"\",\n notes = \"\",\n // MORE DETAILS\n tax_code = '',\n tx1 = '',\n tx2 = '',\n sales_this = '',\n sales_last = '',\n sales_penultimate = '',\n combined_po = '',\n over_due = '',\n credit_limit = '',\n\n\n } = _info;\n\n\n return (\n <>\n\n <div style={{ \"padding\": \"0px\", \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\" }}>\n\n\n\n <Row>\n <Col span={12}>\n <div style={{ \"padding\": \"0px 5px\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"11px\" }}>\n <conditional.true value={(name)}>\n <span className=\"c\" style={{ \"fontSize\": \"14px\", \"display\": \"inline\" }}><strong>{name}</strong>\n  <small style={{ \"fontSize\": \"10px\" }}>({ship_to})</small>\n </span>\n <div style={{ \"height\": \"0px\" }} className=\"shim\"></div>\n </conditional.true>\n <conditional.true value={(email)}>\n <div style={{ \"marginTop\": \"-2px\" }}><a href={\"mailto:\" + email}>{email}</a></div>\n <div className=\"shim\"></div>\n </conditional.true>\n <conditional.true value={(address_1 || address_2)}>\n {address_1} {address_2} <br />\n </conditional.true>\n <conditional.true value={(city)}>\n {city}, {province} {country} <br />\n </conditional.true>\n <conditional.true value={(phone || phone)}>\n <conditional.true value={(phone && phone_2)}>\n <conditional.true value={(phone)}><strong>{phone}</strong></conditional.true> -\n <conditional.true value={(phone_2)}><strong> {phone_2}</strong></conditional.true>\n </conditional.true>\n <conditional.true value={!(phone && phone_2)}>\n <conditional.true value={(phone)}><strong>{phone}</strong></conditional.true>\n <conditional.true value={(phone_2)}><strong> {phone_2}</strong></conditional.true>\n </conditional.true>\n </conditional.true>\n\n <conditional.true value={(more)}>\n <div className=\"shim\" /><div className=\"shim\" />\n <Space size={20} >\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}>\n <div style={{ \"display\": \"inline-block\", \"marginRight\": \"10px\" }}>\n <div style={{ \"width\": \"75px\", \"textAlign\": \"left\" }}>\n <div><strong>Taxes: </strong></div>\n <Space className=\"bc\" style={{ \"border\": \"1px solid\", \"padding\": \"10px\" }} direction=\"vertical\">\n <div style={{ \"width\": \"75px\" }}><strong>Tx: </strong>{tax_code}</div>\n <div><strong>Tx1: </strong>{tx1}</div>\n <div><strong>Tx2: </strong>{tx2}</div>\n </Space>\n </div>\n </div>\n </span>\n\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}>\n <div style={{ \"display\": \"inline-block\", \"marginRight\": \"10px\" }}>\n <div style={{ \"width\": \"75px\", \"textAlign\": \"left\" }}>\n <div><strong>Sales: </strong></div>\n <Space className=\"bc\" style={{ \"border\": \"1px solid\", \"padding\": \"10px\" }} direction=\"vertical\">\n <div style={{ \"width\": \"75px\" }}><strong>{moment().format(\"YYYY\")}: </strong>{sales_this}</div>\n <div><strong>{moment().add(-1, \"year\").format(\"YYYY\")}: </strong>{sales_penultimate}</div>\n <div><strong>{moment().add(-2, \"years\").format(\"YYYY\")}: </strong>{sales_last}</div>\n </Space>\n </div>\n </div>\n </span>\n </Space>\n </conditional.true>\n\n\n </Typography.Paragraph>\n </div>\n </Col>\n\n <Col span={12}>\n <div style={{ \"textAlign\": \"right\", \"padding\": \"8px\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"12px\" }}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Created: </strong>{bmDate(created * 1000)}</span>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Last Activity: </strong>{bmDate(last_activity * 1000)}</span>\n\n <conditional.true value={(customer_type)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Customer type: </strong>{customer_type}</span>\n </conditional.true>\n\n <conditional.true value={(attn)}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Attn: </strong>{attn}</span>\n </conditional.true>\n <conditional.true value={(discount)}>\n <span style={{ \"color\": \"#228b22\", \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Standing Discount: </strong>{discount}% </span>\n </conditional.true>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>FB Points: </strong>{convertFBPoints(frequent_buyer_points)}</span>\n\n <conditional.true value={(more)}>\n <conditional.true value={(fax !== \"\")}><span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Fax : </strong>{fax}</span></conditional.true>\n <conditional.true value={(combined_po !== \"\")}><span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Combined PO : </strong>{combined_po}</span></conditional.true>\n <conditional.true value={(over_due !== \"\")}><span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>AR Ttl : </strong>{over_due}</span></conditional.true>\n <conditional.true value={(credit_limit !== \"\")}><span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Credit Limit : </strong>{credit_limit}</span></conditional.true>\n </conditional.true>\n\n </Typography.Paragraph>\n </div>\n </Col>\n </Row>\n <div onClick={() => setMore(!more)} style={{ \"fontSize\": \"11px\", \"display\": \"block\", \"float\": \"right\" }}><strong><a>{(!more) ? \"More\" : \"Less\"} account info   </a></strong></div>\n <div className=\"shim\" />\n <br clear=\"all\" />\n </div>\n\n\n\n\n\n\n\n </>\n )\n }\n\n const drawChildTable = (_record) => {\n if (drawType === \"title\") {\n return <Title isbn={_record.isbn} />;\n }\n if (drawType === \"invoice\") {\n return <div className=\"hideHover\" style={{ \"marginLeft\": \"-8px\", \"marginRight\": \"-3px\", \"marginTop\": \"-4px\", \"marginBottom\": \"-4px\" }}><InvoiceActivity close={setExpanded} invoice_is_supplier={_record.invoice_is_supplier} invoice={_record.invoice_key} /></div>\n }\n if (drawType === \"supplier\") {\n return <div className=\"hideHover\" style={{ \"marginLeft\": \"-8px\", \"marginRight\": \"-3px\", \"marginTop\": \"-4px\", \"marginBottom\": \"-4px\" }}><SupplierActivity close={setExpanded} invoice_is_supplier={_record.invoice_is_supplier} supplier={_record.supplier} /></div>\n }\n return (<></>);\n }\n\n const expandCell = (_data, _type) => {\n setDrawType(_type);\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n if (_type === drawType) {\n setExpanded([]);\n } else {\n setExpanded([_data.key]);\n }\n }\n }\n\n\n if (loading) {\n return (<div style={{ \"margin\": \"-8px\" }}></div>);\n }\n\n return (\n <div className=\"bcg2\" style={{ \"margin\": \"0px\", \"padding\": \"20px\" }}>\n\n\n <Typography.Title level={5}>Customer</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <>\n {drawContact(results.customer_info)}\n <div className=\"shim\" /><div className=\"shim\" />\n {drawFilters()}\n <div className=\"shim\" /><div className=\"shim\" />\n </>\n\n\n\n <div className=\"bc\" style={{ \"border\": \"1px solid\" }}>\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n\n <Table\n\n size=\"small\"\n columns={columns}\n className={\"mediumTable\"}\n rowClassName={(record, index) => {\n return \"sales-\" + record.status;\n }}\n dataSource={results.rows}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n\n />\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n </div>\n </div>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Tag, Divider, Space, Checkbox, Typography, Table, Button } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport conditional from \"../../tools/conditional\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport PurchaseActivity from \"./PurchaseActivity\";\nimport { bmDate, getFilterSet, saveFilterSet } from \"../../utils/Utils\";\nimport Overlay from \"../Overlay\";\nimport PurchaseActivity2 from \"./PurchaseActivity2\";\nimport Paginate from \"../Paginate\";\n\nexport default function SupplierActivity2(props) {\n\n const { chain_number = \"\", supplier, close = () => { } } = props;\n const [results, setResults] = useState({ customer_info: {}, total: 0, rows: [] });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 10, offset: 0 });\n\n const initFilters = {\n supplier: supplier,\n limit: 100,\n offset: 0,\n orders: false,\n returns: false,\n recent: false\n }\n\n const [filters, setFilters] = useState(initFilters);\n\n\n const saveFilters = (_obj) => {\n\n\n setFilters(_obj);\n }\n\n const getCustomerActivity = () => {\n\n let _filters = { ...filters }\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n\n if(chain_number !== \"\"){\n _filters.chain_number = chain_number;\n }\n\n setLoading(true);\n apiCall(\"activity/getBySupplier\", _filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n }\n setLoading(false);\n })\n }\n\n useEffect(getCustomerActivity, [paginate, filters]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const columns = [\n {\n title: <small>Date</small>, dataIndex: \"date\", key: \"date\", render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do YYYY\") : \"\";\n }\n },\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\" },\n {\n title: <small>Purchase Order</small>, dataIndex: \"purchase_order\", key: \"purchase_order\", render: (e, f) => {\n\n return (e) ? e : \"\";\n\n }\n },\n { title: <small>Items</small>, dataIndex: \"items\", key: \"items\" },\n { title: <small>Note</small>, className: \"nowrap\", dataIndex: \"note\", key: \"note\" }\n ]\n\n const drawFilters = () => {\n return (\n <div className=\"bc bcg2\" style={{ \"margin\": \"0px\", \"padding\": \"2px 5px\", \"borderTop\": \"1px solid\", \"borderBottom\": \"1px solid\" }}>\n <Checkbox className=\"mini-checkbox\" checked={filters.recent} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"recent\": e.target.checked })} />\n <small> Show last 60 days only</small>\n\n <div style={{ \"float\": \"right\" }}>\n <Space size={7}>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={(!filters.orders && !filters.returns)} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"orders\": false, \"returns\": false })} />\n <small> All</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.orders} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"orders\": e.target.checked })} />\n <small> Orders</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" checked={filters.returns} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"returns\": e.target.checked })} />\n <small> Returns</small>\n </div>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n )\n }\n\n const drawContact = (_info = {}) => {\n\n const {\n supplier = \"\",\n created = null,\n name = \"\",\n address_1 = \"\",\n address_2 = \"\",\n city = \"\",\n province = \"\",\n country = \"\",\n email = \"\",\n phone = \"\",\n phone_2 = \"\",\n fax = \"\",\n } = _info;\n\n return (\n <>\n\n\n <div style={{ \"padding\": \"0px 5px\", \"paddingBottom\": \"0px\", \"marginTop\": \"-5px\" }}>\n <div style={{ \"float\": \"right\", \"textAlign\": \"right\" }}>\n <Typography.Paragraph style={{ \"fontSize\": \"11px\" }}>\n <span style={{ \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>Created: </strong>{bmDate(created * 1000)}</span>\n </Typography.Paragraph>\n </div>\n <Typography.Paragraph style={{ \"fontSize\": \"11px\" }}>\n <conditional.true value={(name)}>\n <span style={{ \"color\": \"#069\", \"fontSize\": \"11px\", \"display\": \"block\" }}><strong>{name}</strong></span>\n </conditional.true>\n <conditional.true value={(email)}>\n <div style={{ \"marginTop\": \"-2px\" }}><a href={\"mailto:\" + email}>{email}</a></div>\n <div className=\"shim\"></div>\n </conditional.true>\n <conditional.true value={(address_1 || address_2)}>\n {address_1} {address_2} <br />\n </conditional.true>\n <conditional.true value={(city)}>\n {city}, {province} {country} <br />\n </conditional.true>\n <conditional.true value={(phone || phone_2)}>\n <conditional.true value={(phone && phone_2)}>\n <conditional.true value={(phone)}><strong>{phone}</strong></conditional.true> -\n <conditional.true value={(phone_2)}><strong> {phone_2}</strong></conditional.true>\n </conditional.true>\n <conditional.true value={!(phone && phone_2)}>\n <conditional.true value={(phone)}><strong>{phone}</strong></conditional.true>\n <conditional.true value={(phone_2)}><strong> {phone_2}</strong></conditional.true>\n </conditional.true>\n </conditional.true>\n </Typography.Paragraph>\n </div>\n </>\n )\n }\n\n\n const drawChildTable = (_record) => {\n\n return (<div className=\"hideHover\" style={{ \"marginLeft\": \"-8px\", \"marginRight\": \"-3px\", \"marginTop\": \"-4px\", \"marginBottom\": \"-4px\" }}> <PurchaseActivity2 chain_number={_record.chain_number} close={setExpanded} supplier={supplier} purchase_order={_record.purchase_order} /></div>);\n }\n\n const expandCell = (_data, _type) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n\n\n return (\n <div style={{ \"padding\": \"20px\", \"margin\": \"0px\" }}>\n\n\n <Typography.Title level={5}>Supplier</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <>\n {drawContact(results.supplier_info)}\n <div className=\"shim\" /><div className=\"shim\" />\n {drawFilters()}\n <div className=\"shim\" /><div className=\"shim\" />\n </>\n\n\n <div className=\"bc\" style={{ \"border\": \"1px solid\" }}>\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n <Table\n loading={loading}\n size=\"small\"\n columns={columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n expandedRowKeys={expanded}\n rowClassName={(record, index) => {\n return \"sales-\" + record.status;\n }}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n\n />\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} />\n </div>\n\n </div>\n )\n}","import { CloseOutlined, DownOutlined } from '@ant-design/icons';\nimport { Button, Checkbox, Divider, Layout, Pagination, Radio, Select, Skeleton, Space, Switch, Table, Typography } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\n\nimport conditional from \"../tools/conditional\";\nimport { apiCall } from \"../utils/Api\";\nimport { bmDate, getFilterSet, saveFilterSet } from \"../utils/Utils\";\nimport CustomerActivity2 from \"./activity/CustomerActivity2\";\nimport InvoiceActivity2 from \"./activity/InvoiceActivity2\";\nimport PurchaseActivity2 from \"./activity/PurchaseActivity2\";\nimport SupplierActivity2 from \"./activity/SupplierActivity2\";\nimport Overlay from \"./Overlay\";\nimport Paginate from \"./Paginate\";\n\nexport default function SalesActivity(props) {\n\n const { openState = \"\", isbn, condition = \"\", summary = false, drawComponent = () => { }, label = \"Sales activity\", setShowActivity = () => { } } = props;\n\n const [results, setResults] = useState({ total: 0, rows: [] });\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 20, offset: 0 });\n const [loading, setLoading] = useState(true);\n const [expanded, setExpanded] = useState([]);\n const [drawType, setDrawType] = useState(\"\")\n const defaultStore = window.sitesettings.stores.find(item => item.store_number === props.store) || { san: \"\" };\n const [storeSan, setStoreSan] = useState(defaultStore.san);\n\n\n\n // const initFilters = getFilterSet(\"sales_activity\") || {\n // limit: (summary) ? 3 : 200,\n // offset: 0,\n // orders: (openState === \"S/O\") ? true : false,\n // returns: false,\n // sales: (openState === \"Held\") ? true : false,\n // adjustments: false,\n // transfers: false,\n // recent: false,\n // }\n\n const initFilters = {\n limit: (summary) ? 3 : 200,\n offset: 0,\n orders: (openState === \"S/O\" || openState === \"Rcvd\") ? true : false,\n returns: (openState === \"Retn\") ? true : false,\n sales: (openState === \"Held\" || openState === \"Ttl\" || openState.substring(0, 1) === \"#\") ? true : false,\n adjustments: (openState === \"Adj\") ? true : false,\n transfers: false,\n recent: false,\n }\n\n\n\n const [filters, setFilters] = useState(initFilters);\n\n const saveFilters = (_obj) => {\n // saveFilterSet(\"sales_activity\", _obj);\n setFilters(_obj)\n }\n\n \n const getStoreActivity = () => {\n\n let _filters = { ...filters };\n _filters.isbn = isbn;\n _filters.condition = condition;\n\n if (storeSan) {\n _filters.wanted_san = storeSan;\n }\n setLoading(true);\n apiCall(\"activity/getByIsbn\", _filters, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getStoreActivity, [filters, isbn]);\n\n const columns = [\n\n\n {\n title: <small>Date</small>, width: 60, dataIndex: \"date\", key: \"date\", render: (e) => {\n return (e) ? <nobr>{bmDate(e * 1000)}</nobr> : \"\";\n }\n },\n { title: <small><nobr>Status</nobr></small>, width: 40, dataIndex: \"status\", key: \"status\" },\n { title: <small>Qty</small>, width: 32, dataIndex: \"quantity\", key: \"quantity\" },\n {\n title: <small>Price</small>, width: 42, dataIndex: \"price\", key: \"price\"\n },\n {\n title: <small>%</small>, width: 28, dataIndex: \"discount\", key: \"discount\", render: (e) => {\n return e || \"\"\n }\n },\n { title: <small>PM</small>, width: 28, dataIndex: \"profit_margin\", key: \"profit_margin\" },\n\n {\n title: <small>Supp</small>, width: 43, dataIndex: \"supplier\", key: \"supplier\", render: (e, f) => {\n\n\n\n return (e) ? <Overlay component={<SupplierActivity2 chain_number={(f.hasOwnProperty(\"chain_number\") ? f.chain_number : \"\")} close={setExpanded} invoice_is_supplier={f.invoice_is_supplier} supplier={f.supplier} />}><a>{e}</a></Overlay> : \"\"\n }\n },\n {\n title: <small>P/O</small>, width: 45, dataIndex: \"purchase_order\", key: \"purchase_order\", render: (e, f) => {\n\n return ((e) ? <Overlay component={<PurchaseActivity2 chain_number={(f.hasOwnProperty(\"chain_number\") ? f.chain_number : \"\")} close={setExpanded} invoice_is_return={f.invoice_is_return} supplier={f.supplier} purchase_order={f.purchase_order} />}><a>{e}</a></Overlay> : \"\")\n\n\n }\n },\n {\n title: <small>Customer</small>, className: \"nowrap\", dataIndex: \"customer_name\", key: \"customer_name\", render: (e, f) => {\n\n return (e) ? <Overlay component={<CustomerActivity2 chain_number={(f.hasOwnProperty(\"chain_number\") ? f.chain_number : \"\")} close={setExpanded} invoice_is_supplier={f.invoice_is_supplier} customer_ship_to={f.customer_ship_to} />}><a>{e}</a></Overlay> : \"\"\n\n\n }\n },\n { title: <small>Cust PO</small>, dataIndex: \"customer_purchase_order\", key: \"customer_purchase_order\" },\n {\n title: <small>Invoice</small>, width: 74, dataIndex: \"invoice_display\", key: \"invoice_display\", render: (e, f) => {\n\n if (f.invoice_key) {\n return (e) ? <nobr><Overlay component={<InvoiceActivity2 chain_number={(f.hasOwnProperty(\"chain_number\") ? f.chain_number : \"\")} close={setExpanded} invoice_is_supplier={f.invoice_is_supplier} invoice={f.invoice_key} />}><a>{e}</a></Overlay></nobr> : \"\";\n } else {\n return (e) ? e : \"\"\n }\n\n }\n },\n { title: <small>Clrk</small>, width: 31, dataIndex: \"cashier\", key: \"cashier\" },\n ];\n\n if (window.sitesettings.stores.length > 1) {\n columns.unshift({ title: <small>#</small>, width: \"21px\", dataIndex: \"chain_number\", key: \"chain_number\" })\n }\n\n\n\n const expandCell = (_data, _type) => {\n setDrawType(_type);\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n if (_type === drawType) {\n setExpanded([]);\n } else {\n setExpanded([_data.key]);\n }\n }\n }\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const drawChildTable = (_record) => {\n\n\n\n\n return;\n\n\n }\n\n\n if (summary) {\n\n\n\n const summaryColumns = [\n\n\n {\n title: <small>Date</small>, dataIndex: \"date\", key: \"date\", render: (e) => {\n return (e) ? bmDate(e * 1000) : \"\";\n }\n },\n { title: <small>Stat</small>, dataIndex: \"status\", key: \"status\" },\n { title: <small>Qty</small>, dataIndex: \"quantity\", key: \"quantity\" },\n { title: <small>Price</small>, dataIndex: \"price\", key: \"price\", render: (e) => { return (e) ? \"$\" + e.toString() : \"\" } },\n {\n title: <small>Supl</small>, dataIndex: \"supplier\", key: \"supplier\", render: (e, f) => {\n return (e) ? <a onClick={() => expandCell(f, \"supplier\")}>{e}</a> : \"\"\n }\n },\n { title: <small>PO#</small>, dataIndex: \"purchase_order\", key: \"purchase_order\" },\n {\n title: <small>Customer</small>, dataIndex: \"customer_name\", key: \"customer_name\", render: (e, f) => {\n return (e) ? <a onClick={() => expandCell(f, \"customer\")}>{e}</a> : \"\"\n }\n },\n { title: <small>CustPO</small>, dataIndex: \"customer_purchase_order\", key: \"customer_purchase_order\" },\n {\n title: <small>Inv#</small>, dataIndex: \"invoice_display\", key: \"invoice_display\", render: (e, f) => {\n\n if (f.invoice_key) {\n return (e) ? <a onClick={() => expandCell(f, \"invoice\")}>{e}</a> : \"\";\n } else {\n return (e) ? e : \"\"\n }\n\n }\n },\n { title: <small>Cl</small>, dataIndex: \"cashier\", key: \"cashier\" },\n ];\n\n\n\n return (\n <div style={{ \"border\": \"1px solid #eee\" }}>\n <Table\n size=\"small\"\n columns={summaryColumns}\n className={\"tableBorder mini\"}\n dataSource={results.rows}\n pagination={false}\n\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n <div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space size={2}>\n <Overlay component={<SalesActivity isbn={isbn} />}><Button className=\"mini-btn\" type=\"primary\" size=\"small\"><small>Detail Activity</small></Button></Overlay>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n\n )\n }\n\n\n const changeStore = (_san) => {\n setStoreSan(_san);\n setFilters({ ...filters, \"offset\": 0, \"limit\": 200 });\n }\n\n const drawHeader = (_header) => {\n return (<>\n {/* <div className=\"bc\" style={{ \"borderBottom\": \"1px solid\", \"textAlign\": \"left\", \"fontSize\": \"12px\", \"padding\": \"0px 8px\", \"height\": \"22px\", \"lineHeight\": \"20px\" }}>\n\n <strong className=\"c\"><small>{_header}</small></strong>\n\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setShowActivity(false)} className=\"tiny-btn\" size=\"small\" type=\"text\"><small style={{ \"fontSize\": \"10px\" }}><CloseOutlined /></small></Button></div>\n <br clear=\"both\" />\n\n </div> */}\n\n\n <div>\n <div className=\"bc\" style={{ \"borderBottom\": \"1px solid\", \"height\": \"29px\" }}>\n <div style={{ \"padding\": \"2px 5px\", \"marginTop\": \"0px\" }} >\n <span style={{ \"fontSize\": \"13px\" }}>\n <Space size={5}>\n {((window.sitesettings.stores.length > 1) &&\n <div style={{ \"marginTop\": \"2px\" }}>\n <Select defaultValue={defaultStore.san} onChange={(e) => changeStore(e)} style={{ \"width\": \"79px\" }} dropdownClassName=\"tinyDropdown\" className=\"tinyAutocomplete\" size=\"small\">\n <Select.Option value={\"\"}>All stores</Select.Option>\n {window.sitesettings.stores.map(item => {\n return (<Select.Option value={item.san}>Store #{item.store_number}</Select.Option>)\n })}\n </Select>\n </div>\n )}\n </Space>\n </span>\n\n <div style={{ \"float\": \"right\", \"fontSize\": \"13px\" }}>\n <Space size={8}>\n {/* <div>\n <Checkbox className=\"mini-checkbox\" checked={(filters.recent)} onChange={(e) => saveFilters({ ...filters, \"offset\": 0, \"recent\": e.target.checked })} />\n <small> Last 60 days</small>\n </div> */}\n <div>\n <Checkbox className=\"mini-checkbox\" onClick={(e) => saveFilters({ ...filters, \"offset\": 0, \"orders\": false, \"returns\": false, \"sales\": false, \"adjustments\": false, \"transfers\": false })} checked={(!filters.orders && !filters.returns && !filters.sales && !filters.adjustments && !filters.transfers)} value=\"all\" />\n <small> All</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" onClick={(e) => saveFilters({ ...filters, \"offset\": 0, \"orders\": (!filters.orders) })} checked={filters.orders} value=\"orders\" />\n <small> Orders</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" onClick={(e) => saveFilters({ ...filters, \"offset\": 0, \"returns\": (!filters.returns) })} checked={filters.returns} value=\"returns\" />\n <small> Returns</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" onClick={(e) => saveFilters({ ...filters, \"offset\": 0, \"sales\": (!filters.sales) })} checked={filters.sales} value=\"sales\" />\n <small> Sales</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" onClick={(e) => saveFilters({ ...filters, \"offset\": 0, \"adjustments\": (!filters.adjustments) })} checked={filters.adjustments} value=\"adjustments\" />\n <small> Adjustments</small>\n </div>\n <div>\n <Checkbox className=\"mini-checkbox\" onClick={(e) => saveFilters({ ...filters, \"offset\": 0, \"transfers\": (!filters.transfers) })} checked={filters.transfers} value=\"transfers\" />\n <small> Transfers</small>\n </div>\n\n <Button onClick={() => setShowActivity(\"\")} className=\"tiny-btn\" size=\"small\" type=\"text\"><small style={{ \"fontSize\": \"10px\" }}><CloseOutlined /></small></Button>\n\n </Space>\n\n </div>\n\n </div>\n\n </div>\n\n\n\n </div>\n </>\n )\n }\n\n\n return (\n <div style={{ \"maxWidth\": \"590px\" }}>\n\n {/* <div className=\"closebar\"> */}\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div className=\"bcg4\" style={{ \"fontWeight\": \"normal\", \"fontSize\": \"11px\", \"display\": \"inline\", \"padding\": \"5px 8px\", \"borderRadius\": \"2px 2px 0 0\" }}>History</div>\n\n <Table\n size=\"small\"\n columns={columns}\n loading={loading}\n rowClassName={(record, index) => {\n\n let ret = \"\";\n if (record.is_active) {\n ret = \"sales-Active\";\n } else {\n ret = \"sales-\" + record.status;\n }\n\n if (record.status.substring(0, 1).toUpperCase() === \"C\") {\n ret += \" dimmed\";\n }\n\n return ret;\n\n\n }}\n title={() => drawHeader(\"History (activity)\")}\n className={\"mediumTable bc\"}\n style={{ \"border\": \"1px solid\", \"borderLeft\": \"6px solid\" }}\n scroll={{ y: 528 }}\n dataSource={results.rows}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n\n />\n\n {/* <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={results.total} /> */}\n\n\n\n\n {/* </div> */}\n\n <conditional.true value={(results.total > 200)}>\n <div style={{ \"float\": \"right\" }}>\n <Pagination size=\"small\" pageSize={200} current={((filters.offset / filters.limit) + 1)} onChange={(e, f) => setFilters({ ...filters, \"offset\": (e - 1) * f, \"limit\": f })} total={results.total} showSizeChanger={false} />\n </div>\n <br clear=\"all\" />\n </conditional.true>\n\n\n\n </div>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { Alert, Row, Col, Space, Divider, Typography, Button } from \"antd\";\nimport { parseAuthorsPlain, parseSubjectsPlain } from \"../../utils/Utils\";\nimport moment from \"moment\";\nimport { PrinterOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport nocover from \"../../media/no-cover.png\";\nimport { useSession } from \"../../utils/Session\";\nexport default function ListPrint(props) {\n\n const [session, setSession] = useSession(); \n const { list_id = \"\" } = useParams();\n\n const [results, setResults] = useState(\n {\n rows: []\n }\n );\n\n const [list, setList] = useState({\n name : \"\",\n isbns_count : 0,\n owner_name : \"\"\n })\n\n\n const [loading, setLoading] = useState(true);\n const [error, setErrror] = useState(false);\n\n const getList = () => {\n\n document.title = \"Print Preview\";\n\n apiCall(\"titlelist/getItems\", { list_id: list_id, limit: 500 }, (_status, _result) => {\n if (_status) {\n setResults(_result)\n } else {\n setErrror(_result.error);\n }\n })\n\n apiCall(\"titlelist/get\", { list_id: list_id }, (_status, _result) => {\n if (_status) {\n setList(_result);\n }\n })\n }\n\n useEffect(getList, []);\n\n\n\n\n const noCover = (e) => {\n e.target.src = nocover;\n e.target.onerror = null;\n }\n\n\n const drawRow = (_item) => {\n\n\n const {\n title = \"\",\n authors = [],\n isbn = \"\",\n eisbn = \"\",\n publisher = \"\",\n binding = \"\",\n release_date = \"\",\n series = \"\",\n subjects = [],\n price = \"\"\n } = _item;\n\n\n return (\n <div style={{ \"width\": \"295px\", \"height\": \"225px\", \"overflow\": \"hidden\" }}>\n\n <Row gutter={15} key={isbn}>\n <Col flex={\"95px\"}>\n <Space direction=\"vertical\">\n <img className=\"shadow-large\" style={{ \"maxWidth\": \"95px\" }} onError={(e) => e.target.src = \"/no-cover.png\"} src={\"https://bookmanager.com/i/m?b=\" + eisbn} />\n </Space>\n </Col>\n <Col flex={\"200px\"}>\n <div style={{ \"lineHeight\": \"14px\" }}><strong>{title}</strong></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small>{parseAuthorsPlain(authors)}</small></div>\n <div style={{ \"marginTop\": \"-10px\" }}><small><em>{binding}</em></small></div>\n <div className=\"shim\" />\n {((series) && <div style={{ \"marginTop\": \"-5px\" }}><small><em>Series: </em>{series}</small></div>)}\n <div style={{ \"marginTop\": \"-5px\", \"lineHeight\": \"12px\" }}><small>{parseSubjectsPlain(subjects)}</small></div>\n <div className=\"shim\" />\n <div style={{ \"marginTop\": \"-5px\" }}><small><em>ISBN: </em>{isbn}</small></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small><em>Published: </em>{moment(release_date * 1000).format(\"MMM Do, YYYY\")}</small></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small><strong>${price}</strong></small></div>\n\n\n\n\n </Col>\n </Row>\n <Divider dashed />\n </div>\n )\n }\n\n if (error) {\n return (<div style={{ \"margin\": \"0 auto\", \"width\": \"350px\", \"marginTop\": \"calc(20vh)\" }}><Alert type=\"error\" description={error} /></div>)\n }\n\n\n const printPage = () => {\n let printContents = document.getElementById('content').innerHTML;\n let originalContents = document.body.innerHTML;\n document.body.innerHTML = printContents;\n window.print();\n document.body.innerHTML = originalContents;\n }\n\n\n return (<>\n\n <div id=\"content\">\n <div id=\"print\" style={{ \"padding\": \"0px 20px\" }}>\n\n <div style={{ \"height\": \"250px\", \"overflow\": \"hidden\" }}>\n <div className=\"shim\" style={{ \"height\": \"20px\" }} />\n <div style={{ \"float\": \"right\", \"padding\": \"20px\" }}><Button className=\"no-print\" onClick={() => printPage()} icon={<PrinterOutlined />} type=\"primary\">Print</Button></div>\n <Typography.Title level={2}>{session.store_name}</Typography.Title>\n <div style={{ \"marginTop\": \"-10px\" }}>\n <div><strong>{list.name}</strong> </div>\n <div>{(list.owner_name && <>Managed by: {list.owner_name} {((list.isbns_count) && <> | <em>({Math.min(list.isbns_count, 500)} titles)</em></>)}</>)}</div>\n {(results.purchase_deadline && <><div>Purchase deadline : <strong>{moment(results.purchase_deadline * 1000).format(\"MMM Do, YYYY\")}</strong></div></>)}\n <div> </div>\n\n </div>\n <Divider />\n </div>\n <div className=\"grgrid\">\n {results.rows.map(item => { return drawRow(item) })}\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n </div>\n </>\n )\n}","import React, { useState, useEffect, useRef } from \"react\";\nimport { Layout, Typography, Divider, Button, Spin, Card, Row, Col, Result, Alert } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../utils/conditional\";\nimport { Link, useParams } from \"react-router-dom\";\nimport Html from \"../utils/Html\";\nimport moment from \"moment\";\nimport nocover from \"../media/no-cover.png\";\nimport { PrinterOutlined } from '@ant-design/icons';\nimport { convertLineBreaks, parseAuthors, parseAuthorsPlain } from \"../utils/Utils.js\";\n\n\nexport default function PreviousOrder(props) {\n\n\n const { order_id = 0 } = useParams();\n const bookorder_id = (props.bookorder_id) ? props.bookorder_id : order_id;\n const can_print = (order_id) ? true : false;\n const [data, setData] = useState({ items: [] });\n const [customer, setCustomer] = useState(false);\n const [loading, setLoading] = useState(true);\n const [errorMsg, setErrorMsg] = useState(\"\");\n const [versionWarning, setVersionWarning] = useState(\"\");\n\n const {\n name = \"\",\n email = \"\",\n addr1 = \"\",\n addr2 = \"\",\n city = \"\",\n prov = \"\",\n postal = \"\",\n country = \"\",\n phone = \"\",\n provider = \"\",\n orgname = \"\"\n } = (data.shipping) ? data.shipping : {}\n\n\n const { summary = {}, order_number = 0, order_date = 0, communication_preference = \"phone\", delivery_type = \"\", payment_type = \"\", payment_message = \"\" } = data;\n const { promo_codes = [], discounts = \"0.00\", total_gift_card_amount_used = \"0.00\", total_owing = \"0.00\", item_count = 0, taxes = [], subtotal = \"0.00\", total = \"0.00\", shipping = \"0.00\" } = summary;\n\n const getOrder = () => {\n apiCall(\"order/get\", { bookorder_id: bookorder_id }, (_status, _result) => {\n if (_status) {\n if (\"online_order_version\" in _result && _result.online_order_version.localeCompare('V3') !== 0) {\n setVersionWarning(\n <>\n <Alert\n message=\"Error\"\n description=\"This order was completed using an outdated webstore version.\n This is likely due to the customer having bookmarked an old URL for your site.\n Some order details may be missing or incorrect.\n Please refer to your bookmanager software's F3 log to review order details.\"\n type=\"error\"\n className=\"no-print\"\n showIcon\n />\n <div className=\"shim no-print\"></div><div className=\"shim no-print\"></div>\n </>\n );\n } else {\n setVersionWarning(\"\");\n }\n setCustomer(_result.user_info)\n setData(_result.order_info);\n setLoading(false);\n if (can_print) {\n window.print();\n }\n } else {\n setLoading(false);\n setErrorMsg(_result.error)\n\n }\n })\n }\n useEffect(getOrder, []);\n\n const ucfirst = (string) => {\n return (string) ? string.charAt(0).toUpperCase() + string.slice(1) : \"\";\n }\n\n const drawTaxes = (_arr) => {\n return _arr.map((item, index) => {\n return (<span key={index} style={{ \"textAlign\": \"right\", \"display\": \"block\" }} className=\"print-align-text-left\">{(item.type) ? <>{item.type} </> : \"\"}${item.amount}</span>)\n })\n }\n\n const pluralize = (count, noun, suffix = 's') => {\n return (count === 1) ? noun : noun + suffix;\n }\n\n const colorMessage = (_available) => {\n let messageColor = (_available.availability === \"available\") ? \"#4dac1e\" : \"#e77e21\";\n return (<span style={{ \"color\": messageColor }}>{ucfirst(_available.message)}</span>)\n }\n\n\n const drawItem = (_item, _data) => {\n\n let { gift_card_info = false } = _item.cart_info.cart_notes;\n let {\n original_price = \"\",\n sold_price = \"\",\n discount = 0,\n } = _item.cart_info;\n\n let { shipping_batches = [] } = _data;\n\n let shipment = [];\n if (shipping_batches.length > 1) {\n shipping_batches.forEach((bat, index) => {\n if (bat.filter(item => item.eisbn === _item.title_info.eisbn && item.condition === _item.title_info.available.code).length > 0) {\n shipment.push(\"Shipment #\" + (index + 1));\n }\n });\n }\n\n\n return (\n <div className=\"avoid-cut\">\n <Card className=\"c bc print-pad-thin\" bodyStyle={{ \"padding\": \"15px\", \"border\": \"none\", \"fontSize\": \"12px\" }} key={_item.title_info.eisbn}>\n <Row>\n <Col span={3}>\n <img onClick={() => window.open(\"/purchasing/browse/filter/t/\" + _item.title_info.isbn, \"_blank\")} onError={(e) => e.target.src = nocover} className=\"lightshadow\" style={{ \"maxHeight\": \"100px\", \"maxWidth\": \"70px\", \"cursor\": \"pointer\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + _item.title_info.eisbn} />\n </Col>\n <Col span={21}>\n <Row gutter={10}>\n <Col span={7}>\n <a onClick={() => window.open(\"/purchasing/browse/filter/t/\" + _item.title_info.isbn, \"_blank\")}>{_item.title_info.title}</a>\n <div style={{ \"fontSize\": \"12px\" }}><span style={{ \"fontFamily\": \"monospace\" }}>{_item.title_info.isbn}</span> <span style={{ \"fontSize\": \"10px\", \"fontWeight\": \"600\" }}>{(_item.title_info.available.text) ? \" - \" + _item.title_info.available.text : \"\"}</span></div>\n {((shipment.length > 0) && <div style={{ \"fontSize\": \"12px\" }}><em>{shipment.join(\", \")}</em></div>)}\n </Col>\n <Col span={5}>\n {parseAuthorsPlain(_item.title_info.authors)}\n </Col>\n <Col span={5}>\n {(_item.cart_info.is_giftcard) ? <>{_item.cart_info.quantity} x ${_item.cart_info.cart_notes.giftcard_price}</> : <>{_item.cart_info.quantity} x ${sold_price}</>}\n {((discount > 0) && <div style={{ \"color\": \"red\" }}><em >{discount}% off ${original_price}</em></div>)}\n </Col>\n <Col span={7}>\n {colorMessage(_item.title_info.available)}\n <conditional.true value={(_item.cart_info.backorder_quantity)}>\n <div className=\"shim\" /><div style={{ \"color\": \"#BD5800\", \"display\": \"block\" }}>{_item.cart_info.backorder_quantity} to be ordered.</div>\n </conditional.true>\n <conditional.true value={(_item.cart_info.backorder_quantity && _item.cart_info.backorder_sub_message)}>\n <div className=\"shim\" />\n <small style={{ \"color\": \"#BD5800\", \"lineHeight\": \"10px\" }}><em>{_item.cart_info.backorder_sub_message}</em></small>\n </conditional.true>\n <conditional.true value={((!_item.title_info.available.onhand) && (!_item.title_info.is_forthcoming) && (!_item.cart_info.is_giftcard))}>\n <div className=\"shim\" />\n <small style={{ \"color\": \"#BD5800\" }}><em>{_item.title_info.available.sub_message}</em></small>\n </conditional.true>\n <conditional.true value={((!_item.title_info.available.onhand) && (_item.title_info.is_forthcoming))}>\n <div className=\"shim\" />\n <small><em style={{ \"color\": \"#BD5800\" }}>Releases: {moment(_item.title_info.release_date * 1000).format('MMM DD, YYYY')}</em></small>\n </conditional.true>\n </Col>\n </Row>\n\n {((gift_card_info && gift_card_info.personalize) && <>\n <div style={{ \"fontSize\": \"12px\" }}>\n <div>From : <em>{gift_card_info.from}</em>   -   To : <em>{gift_card_info.to}</em></div>\n <div>Message : <em>{gift_card_info.message}</em></div>\n </div>\n </>)}\n\n {(_item.cart_info.gift_registry_info && <>\n <div>{_item.cart_info.gift_registry_info.occasion} gift registry : <em>{_item.cart_info.gift_registry_info.name}</em></div>\n </>)}\n </Col>\n </Row>\n </Card>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n )\n }\n\n\n\n\n\n const drawCustomer = (_cust) => {\n\n\n\n\n\n\n // Don't draw card if customer object is null/false\n if (!_cust) {\n return (<></>)\n }\n\n return (\n <>\n <Card className=\"bc c flex-card print-pad-thin\" >\n\n <div className=\"flex-child-50\">\n <strong>Sold to</strong>\n\n <div style={{ \"paddingLeft\": \"10px\" }}>\n {(customer.is_guest && <div><em>Guest Checkout</em></div>)}\n {customer.first_name} {customer.last_name}\n <conditional.true value={(customer.company)}>\n <br />{customer.company}\n </conditional.true>\n <conditional.true value={(customer.email_address)}>\n <br /><a href={\"mailto:\" + customer.email_address}>{customer.email_address}</a>\n </conditional.true>\n <conditional.true value={(customer.phone_number)}>\n <br /><>{customer.phone_number}</>\n </conditional.true>\n <conditional.true value={(customer.hasOwnProperty(\"address\") && (customer.address))}>\n <br />\n {(customer.hasOwnProperty(\"address\") && customer.address)}\n <br />\n {(customer.hasOwnProperty(\"city\") && customer.city)}, {(customer.hasOwnProperty(\"prov\") && customer.prov)} {(customer.hasOwnProperty(\"country\") && customer.country)}\n <br />\n {(customer.hasOwnProperty(\"postal\") && customer.postal)}\n <br />\n \n </conditional.true>\n <br />\n\n </div>\n </div>\n <div className=\"flex-child-50\">\n <conditional.true value={(data.delivery_key === \"ship\")}>\n <Divider dashed className=\"no-print\" style={{ \"marginTop\": \"10px\", \"marginBottom\": \"10px\" }} />\n\n {/* SHIPPING */}\n <strong>Shipping</strong>\n </conditional.true>\n\n <div style={{ \"paddingLeft\": \"10px\" }}>\n <conditional.true value={(data.delivery_key === \"ship\")}>\n <conditional.true value={(orgname)}>\n {orgname}<br />\n </conditional.true>\n <conditional.true value={(name)}>\n {name}\n </conditional.true>\n <conditional.true value={(email)}>\n <br /><a href={\"mailto:\" + email}>{email}</a>\n </conditional.true>\n <conditional.true value={(phone)}>\n <br />{phone}\n </conditional.true>\n <conditional.true value={(addr1)}>\n <br />{addr1}\n </conditional.true>\n <conditional.true value={(addr2)}>\n <br />{addr2}\n </conditional.true>\n <conditional.true value={(city)}>\n <br />{city}, {prov} {country}\n </conditional.true>\n <conditional.true value={(postal)}>\n <br />{postal}\n </conditional.true>\n <conditional.true value={(provider)}>\n <br />{provider}\n </conditional.true>\n\n </conditional.true>\n </div>\n </div>\n\n\n </Card>\n </>\n )\n }\n\n const WrapSider = (props) => {\n\n if (props.can_print) {\n return (<>{props.children}<br /></>)\n } else {\n return (\n <Layout.Sider className=\"bcg3\" width={(can_print) ? \"100%\" : 300} style={{ \"marginRight\": \"10px\" }} theme=\"light\">\n {props.children}\n </Layout.Sider>\n )\n }\n\n }\n\n\n return (\n <>\n <div>\n <Layout className=\"layout\">\n <Layout.Content className=\"layoutHeader\" style={{ \"padding\": \"0px\", \"width\": \"auto\" }} >\n <div style={{ \"padding\": (can_print) ? \"10px\" : \"30px\" }}>\n <div style={{ \"float\": \"right\", \"paddingRight\": \"30px\", \"marginTop\": \"-10px\" }}>\n <Button onClick={() => (can_print) ? window.print() : window.open(\"/previous_order/\" + bookorder_id, \"_blank\")} className=\"no-print\" icon={<PrinterOutlined />} type=\"primary\">Print</Button>\n </div>\n <Typography.Title level={4}>Order #{bookorder_id}</Typography.Title>\n <em>Stock statuses and order timeframes are as of the date the order was placed.</em>\n <Divider className=\"no-print\" />\n <conditional.true value={loading}>\n <div style={{ \"height\": \"calc(100vh - 200px)\", \"display\": \"flex\", \"alignItems\": \"center\", \"justifyContent\": \"center\" }}><Spin size=\"large\" /></div>\n </conditional.true>\n <conditional.true value={(!loading)}>\n <Layout className=\"bcg3\" >\n {(errorMsg && <Result status=\"error\" title={errorMsg} />)}\n <conditional.true value={(!errorMsg)}>\n <WrapSider can_print={can_print}>\n <div>\n <conditional.true value={can_print}>\n {versionWarning}\n </conditional.true>\n <Card className=\"bc c avoid-cut print-pad-thin\" >\n <Row>\n <Col flex=\"75px\"><strong>Date</strong></Col>\n <Col flex=\"auto\">{moment(order_date * 1000).format('MMM DD, YYYY h:mma')}</Col>\n </Row>\n <Row>\n <Col flex=\"75px\"><strong>Delivery</strong></Col>\n <Col flex=\"auto\">{delivery_type}</Col>\n </Row>\n <Row>\n <Col flex=\"75px\"><strong>Payment</strong></Col>\n <Col flex=\"auto\">{payment_message}</Col>\n </Row>\n </Card>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n {drawCustomer(customer)}\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <conditional.true value={((data.notes) || (data.purchaseorder))}>\n <Card className=\"bc c avoid-cut print-pad-thin\" >\n {((data.purchaseorder) && <div><strong>P/O </strong><span style={{ \"display\": \"block\" }}>{data.purchaseorder}</span></div>)}\n {((data.notes) && <div><strong>Notes</strong><span style={{ \"display\": \"block\" }}>{<Html html={convertLineBreaks(data.notes)} />}</span></div>)}\n </Card>\n </conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Card className=\"bc c avoid-cut print-pad-thin\" >\n <div><strong>Order Summary </strong><span style={{ \"display\": \"block\" }}>{item_count} {pluralize(item_count, \"item\", \"s\")}</span></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n\n <Row>\n <Col flex=\"90px\">Price</Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\">${summary.original_price}</Col>\n </Row>\n <conditional.true value={(promo_codes.length > 0)}>\n {promo_codes.filter(item => item.type !== \"freeship\").map(item => {\n\n return (\n <Row>\n <Col flex=\"90px\"><span style={{ \"color\": \"#f00\" }}>{item.description}</span></Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\"><div style={{ \"color\": \"#f00\" }}>-${item.amount}</div></Col>\n </Row>\n )\n })}\n </conditional.true>\n <conditional.true value={(total_gift_card_amount_used !== \"0.00\")}>\n <Row>\n <Col span={17}><span style={{ \"color\": \"#f5222d\" }}>Gift Cards</span></Col>\n <Col span={7}><span style={{ \"textAlign\": \"right\", \"display\": \"block\", \"color\": \"#f5222d\" }} className=\"print-align-text-left\">-${total_gift_card_amount_used}</span></Col>\n </Row>\n </conditional.true>\n <conditional.true value={discounts !== \"0.00\"}>\n <Row>\n <Col flex=\"90px\"><span style={{ \"color\": \"#f5222d\" }}>Discounts</span></Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\"><span style={{ \"color\": \"#f5222d\" }}>- ${discounts}</span></Col>\n </Row>\n </conditional.true>\n <Row>\n <Col flex=\"90px\">Subtotal</Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\">${subtotal}</Col>\n </Row>\n <conditional.true value={shipping !== \"0.00\"}>\n <Row>\n <Col flex=\"90px\">Shipping</Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\">${shipping}</Col>\n </Row>\n </conditional.true>\n\n <conditional.true value={(promo_codes.length > 0)}>\n {promo_codes.filter(item => item.type === \"freeship\").map(item => {\n\n return (\n <Row>\n <Col flex=\"90px\"><span style={{ \"color\": \"#f00\" }}>{item.description}</span></Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\"><div style={{ \"color\": \"#f00\" }}>-${item.amount}</div></Col>\n </Row>\n )\n })}\n </conditional.true>\n\n\n <Row>\n <Col flex=\"90px\">Taxes</Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\">{drawTaxes(taxes)}</Col>\n </Row>\n <Divider className=\"no-print\" />\n <Row>\n <Col flex=\"90px\"><strong>Total Owing</strong></Col>\n <Col style={{ \"textAlign\": \"right\" }} className=\"print-align-text-left\" flex=\"auto\"><strong>${total_owing}</strong></Col>\n </Row>\n </Card>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </WrapSider>\n <Layout.Content>\n <conditional.true value={!can_print}>\n {versionWarning}\n </conditional.true>\n {data.items.map(item => {\n return drawItem(item, data);\n })}\n {/* Add buffer to the bottom to prevent products being cut off when printing to PDF on firefox */}\n <div className=\"shim print-visibile\" style={{ \"visibility\":\"hidden\",\"padding\": \"60px\" }} />\n </Layout.Content>\n </conditional.true>\n </Layout>\n </conditional.true>\n </div>\n </Layout.Content>\n </Layout>\n </div>\n </>\n )\n}","import { Button, message, Progress } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { apiCall, apiDownload } from \"../utils/Api\";\n\nexport default function ProcessPDF(props) {\n\n // get the process id from the browser param\n const { process_id = \"\" } = useParams();\n\n // set defaults\n const [report, setReport] = useState({\n progress: 0,\n eta_seconds: null,\n completed: false,\n })\n\n const getProgress = () => {\n apiCall(\"report/progress\", { progress_report_id: process_id }, (_status, _result) => {\n if (_status) {\n setReport(_result)\n if (!_result.completed) {\n // not done, poll again\n setTimeout(getProgress, 100);\n } \n } else {\n message.error(_result.error)\n }\n })\n }\n\n const downloadReport = () => {\n apiDownload({ progress_report_id: process_id }, \"report/get\");\n }\n\n useEffect(getProgress, []);\n\n\n const drawETA = () => {\n\n\n if(!report.completed){\n\n if(report.eta_seconds === null){\n return \"Waiting...\"\n }\n\n if(report.progress === 99){\n return \"Converting....\"\n }\n\n return \"Approx \" + report.eta_seconds + \" seconds remaining...\"\n }\n\n \n return \"\";\n }\n\n return (\n <div style={{\"width\" : \"300px\", \"margin\" : \"0 auto\", \"marginTop\" : \"80px\", \"textAlign\" : \"center\"}}>\n <Progress type=\"circle\" percent={report.progress} width={80} />\n <br /> <br /> \n <p style={{\"textAlign\" : \"center\", \"fontSize\" : \"16px\", \"fontWeight\" : \"500\"}}>{drawETA()} </p>\n <Button disabled={(!report.completed)} onClick={() => downloadReport()}>Download</Button>\n </div>);\n\n}","/*\n\nBlank Layout - Wrap for printing\n\n*/\nimport React from \"react\";\nimport { Layout } from 'antd';\n\n\n\n\nexport default function Blank(props) {\n\n const {bg_color = \"\"} = props; \n return (\n <> \n\n <Layout style={{\"backgroundColor\" : (bg_color) ? bg_color : \"\"}}>\n <Layout.Content className=\"bcg bc\" style={{\"min-height\": \"100vh\", \"overflow\": \"auto\", \"backgroundColor\" : (bg_color) ? bg_color : \"\" }}>\n <div style={{ \"padding\": \"0px\"}}>\n {props.children}\n </div>\n </Layout.Content>\n </Layout>\n </>\n );\n\n}","export default __webpack_public_path__ + \"static/media/logo.a62b51db.png\";","export default __webpack_public_path__ + \"static/media/logo_dark.bf64e173.png\";","import { Badge, Button, Modal, Tooltip, Space, Divider } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useSession } from \"./utils/Session\";\nimport { apiCall } from \"./utils/Api\";\nimport { SelectOutlined } from '@ant-design/icons';\nimport Cookies from \"js-cookie\";\n\nexport default function PubSub(props) {\n\n\n\n // Publishes can be thought about as trying to communicate to different sets of subscribers.\n\t// The sets we use are:\n\t// \ta specific browser (only things that share the same session cookie)\n\t// \t\tuse \\context()->getSession()->getChannelId()\n\t// \t\tthis is for syncing session level info, like changing corp/logging out\n\t// \ta specific user (channel specific to a contact row, uses contact)\n\t// \t\tuse \\context()->getContact()->getChannelId()\n\t// \t\tthis is for syncing account level info, like filter preset default\n\t// \t\tworks across multiple devices\n\t// \ta specific store (channel specific to a contact row, uses corp id)\n\t// \t\tuse \\context()->getCorp()->getId()\n\t// \t\tthis is for syncing store level info, like store cart\n\t// \t\tworks across multiple devices\n\t// NOTE: it is possible to do the intersect of the sets by using each bit of info in the uri\n\t// Uris can be of two different types:\n\t// \tcom.[store_id].*\n\t// \tcom.bookmanager.*\n\t// The main difference is security. To use a com.[store_id].*, authentication has to happen\n\t// to prove you use it. Everyone can use com.bookmanager.* so sensitive info should not be\n\t// sent through this.\n\n \n const mode = process.env.REACT_APP_API || 'inherit';\n const live_cookie = Cookies.get(\"l\") || \"false\";\n\n const is_live = ((live_cookie===\"true\") || (mode === \"live\")) ? true : false;\n \n \n\n const [live, setLive] = useState(false);\n const [session, setSession] = useSession();\n\n\n // session context isn't updating inside the pubsub event methods - using a window var\n useEffect(() => {\n window.pubsub_session = session;\n }, [session])\n\n const autobahn = window.autobahn;\n const principal = session.store_id;\n const ticket = session.session_id;\n const channel_id = session.contact.channel_id;\n const [ping, setPing] = useState(100);\n\n\n var msgpser = new autobahn.serializer.MsgpackSerializer();\n var jsonser = new autobahn.serializer.JSONSerializer();\n\n const toURI = (_string) => {\n let no_whitespace = _string.replace(/\\s+/g, '-');\n let sanitized = no_whitespace.replace(/[^A-Za-z0-9-]+/g, '', no_whitespace);\n return sanitized;\n }\n\n\n\n const openModal = (_obj) => {\n // Default structure from V1 - all keys except data are expected\n const {\n action = \"\",\n ee_def_id = \"\",\n name = \"\",\n from_pubsubid = \"\",\n data = {},\n } = _obj;\n\n let msg = {\n from : name,\n title : \"Message from BM Station \" + from_pubsubid,\n request : \"You have been asked to view the list:\",\n footer : \"Regardless of your choice, the list has been saved in My Lists.\",\n button : \"Open in Picklist view\",\n link : \"/picklist/\" + action + \"/\" + ee_def_id\n }\n\n \n switch(action){\n\n case \"view_list\":\n msg.link = \"/purchasing/browse/filter/v/sequence/x/\"+ee_def_id;\n msg.button = \"Open in Browse\";\n break;\n\n case \"view_route\":\n msg.from = data.from || \"\";\n msg.title = \"Message from \" + msg.from;\n msg.request = \"Another user would like you to view a Biz page, list, or title:\";\n msg.link = data.route || \"\";\n msg.button = \"Open in a new tab\";\n msg.footer = \"\";\n break;\n\n case \"view_picklist\": break;\n default: break;\n \n }\n\n \n Modal.confirm({\n title: <div style={{\"textAlign\" : \"center\"}}>{msg.title}</div>,\n icon: null,\n cancelText : \"Close\",\n content: <>\n <p style={{ \"fontSize\": \"14px\", \"textAlign\" : \"center\" }}>{msg.request} <br />\n <div className=\"shim\" />\n <div><strong className=\"c\">{name}</strong></div> \n </p>\n <div style={{\"textAlign\" : \"center\"}}>\n <Space>\n <Button onClick={() => window.open(msg.link)} type=\"primary\">{msg.button} <SelectOutlined style={{ \"transform\": \"scaleX(-1)\", \"fontSize\": \"12px\" }} /></Button>\n </Space>\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div className=\"c\" style={{\"textAlign\" : \"center\"}}><em>{msg.footer}</em></div>\n <Divider style={{\"marginBottom\" : \"0px\"}} dashed />\n </>,\n \n okButtonProps : {style : {\"display\" : \"none\"}}\n\n })\n\n\n }\n\n\n const onPicklist = (_args) => {\n // not an array\n if (!Array.isArray(_args)) { return; }\n // nothing inside\n if (_args.length < 1) { return; }\n \n openModal(_args[0]);\n }\n\n\n const onStation = (_args) => {\n setSession({ ...window.pubsub_session, \"station_id\": _args[0].station_id });\n }\n\n const onCart = (_args) => {\n setSession({ ...window.pubsub_session, \"cart\": _args });\n }\n\n const onQuickPick = (_args) => {\n setSession({ ...window.pubsub_session, \"quick_picks\": _args })\n }\n\n const onBookmark = (_args) => {\n setSession({ ...window.pubsub_session, \"titlelist_bookmarks\": _args })\n }\n\n const onPreset = (_args) => {\n if (Array.isArray(_args) && _args.length > 0) {\n setSession({ ...window.pubsub_session, \"filter_preset_defaults\": _args[0] })\n }\n }\n\n const onCorp = (_args) => {\n if (Array.isArray(_args) && _args.length > 0 && _args[0] === \"reset\") {\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n setSession(_result);\n window.store_id = _result.store_id;\n apiCall(\"store/getSettings\", {}, (_s, _r) => {\n window.sitesettings = _r;\n })\n }\n })\n }\n return;\n }\n\n const onContact = (_args) => {\n if (Array.isArray(_args) && _args.length > 0 && _args[0] === \"reset\") {\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n setSession(_result);\n window.store_id = _result.store_id;\n apiCall(\"store/getSettings\", {}, (_s, _r) => {\n window.sitesettings = _r;\n })\n }\n })\n }\n return;\n }\n\n\n const onPing = (_session = \"\") => {\n _session.call('com.bookmanager.ping', [Date.now()]).then((e) => {\n setPing(Date.now() - e)\n });\n setTimeout(() => onPing(_session), 10000);\n }\n\n const onChallenge = (_session, _method, _extra) => {\n if (_method === \"ticket\") { return ticket; }\n console.log(\"Can't authenticate using '\" + _method + \"'\");\n }\n\n const connection = new autobahn.Connection({\n url: 'wss://bookmanager.com/ws/',\n realm: 'bookmanager',\n authmethods: [\"ticket\"],\n // authid: principal.toString(),\n authid: principal.toString() + \"-\" + session.picklist_identity,\n onchallenge: onChallenge,\n serializers: [msgpser, jsonser]\n });\n\n\n connection.onopen = function (_session) {\n\n \n\n window.ses = _session;\n window.wamp_session_id = _session.id;\n\n toURI(session.picklist_identity)\n\n setLive(true);\n onPing(_session);\n\n\n // USER STORE\n let picklist_path = \"com.\" + principal.toString() + \".picklist.\" + toURI(session.picklist_identity);\n // USER BROWSER LEVEL (TABS) \n let corp_path = \"com.bookmanager.\" + session.session_channel_id + \".corp\";\n\n // USER BROWSER LEVEL (TABS) \n let contact_path = \"com.bookmanager.\" + channel_id + \".corp\";\n\n // STORE\n let cart_path = \"com.\" + principal.toString() + \".cart\";\n // USER STORE\n let quick_pick_path = \"com.\" + principal.toString() + \".device.quick_pick.\" + channel_id;\n \n let station_path = \"com.bookmanager.\" + session.session_channel_id + \".station\";\n // USER STORE\n let bookmark_path = \"com.\" + principal.toString() + \".device.titlelist_bookmark.\" + channel_id;\n let preset_path = \"com.bookmanager.\" + channel_id + \".filter_preset_defaults\";\n\n\n\n window.ses.subscribe(picklist_path, onPicklist).then((subscription) => {\n window.picklist_sub = subscription;\n });\n\n window.ses.subscribe(corp_path, onCorp);\n window.ses.subscribe(contact_path, onContact);\n window.ses.subscribe(bookmark_path, onBookmark);\n window.ses.subscribe(cart_path, onCart);\n window.ses.subscribe(quick_pick_path, onQuickPick);\n window.ses.subscribe(station_path, onStation);\n window.ses.subscribe(preset_path, onPreset);\n\n };\n\n connection.onclose = function (reason, details) {\n setLive(false);\n console.log(\"disconnected\", reason, details.reason, details);\n }\n\n useEffect(() => {\n\n if(is_live){\n connection.open();\n }\n \n return () => connection.close();\n }, [session.picklist_identity]);\n\n\n\n\n\n return (\n <Tooltip title={(live) ? <>Syncing is on<br /><small>Last ping {ping.toString()}ms</small></> : \"Cart sync is off\"}>\n {/* <span onClick={() => openModal({ action: \"view_list\", ee_def_id: \"qDS_aSepKbM\", def_id: 484410, name: \"Picklist Inv G54916 Clark, Mark\", from_pubsubid: \"24 Tobias\" })}> */}\n {((live) && <Badge color={\"#48ef00\"} dot />)}\n {((!live) && <Badge color={\"#999999\"} dot />)}\n {/* </span> */}\n </Tooltip>\n );\n\n}","import React from \"react\";\nimport { Typography, Space } from \"antd\";\nimport PubSub from \"../PubSub\";\n\nexport default function AccountCard(props) {\n\n const { store_name = \"\", contact = { first_name: \"\", last_name: \"\" } } = props;\n\n return (<div className=\"accountCard\" >\n <div>\n <Space size={0}>\n <div style={{ \"textAlign\": \"right\", \"paddingLeft\": \"3px\" }}>\n <Typography.Title style={{ \"paddingLeft\": \"3px\", \"overflow\": \"hidden\" }} level={5}>\n <div className=\"shim\"></div>\n <div style={{\"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"whiteSpace\": \"nowrap\", \"maxWidth\": \"150px\", \"marginBottom\" : \"-9px\" }}>\n <small>\n <a>{contact.first_name} {contact.last_name}</a>\n </small>\n  </div>\n <div style={{ \"display\": \"block\", \"textOverflow\": \"ellipsis\", \"overflow\": \"hidden\", \"whiteSpace\": \"nowrap\", \"color\": \"#fff\", \"fontSize\": \"11px\", \"fontWeight\": \"normal\", \"marginTop\": \"-6px\", \"opacity\": \"0.7\", \"maxWidth\": \"150px\" }}>\n <small><PubSub /> {store_name}</small>\n </div>\n </Typography.Title>\n </div>\n </Space>\n </div>\n </div>)\n}","import { Button, Modal, message } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport { pluralize } from \"../utils/Utils\";\n\nexport default function LogOutLocations(props) {\n\n const { trigger = false } = props;\n const [count, setCount] = useState(0);\n const [loading, setLoading] = useState(false);\n\n const fetchLocations = () => {\n apiCall(\"account/countOfEveryDevice\", {}, (_status, _result) => {\n if (_status) {\n setCount(_result.count)\n }\n })\n }\n useEffect(fetchLocations, [trigger]);\n\n const logOutLocations = () => {\n\n Modal.confirm({\n title: \"Are you sure?\",\n content : \"Please confirm you wish to log out all other sessions.\",\n okText : \"Confirm\",\n onOk: () => {\n\n setLoading(true);\n apiCall(\"account/logoutEveryDevice\", {}, (_status, _result) => {\n if (_status) {\n message.success(\"Successfully signed out at \" + (count - 1) + \" \" + pluralize(count - 1, \"session\", \"s\"));\n setCount(0);\n }\n setLoading(false);\n })\n\n }\n })\n\n }\n\n if (count <= 1) {\n return (<></>)\n }\n\n return (<><Button onClick={() => logOutLocations()} loading={loading} block type=\"dashed\" ><><em>Sign out at <strong>{count - 1}</strong> other {pluralize(count - 1, \"session\", \"s\")}</em></></Button><div className=\"shim\" /></>)\n}","import { Popover, Select, Button, Space, Divider, Input, message } from \"antd\";\nimport React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { apiCall } from \"../utils/Api\";\nimport { useSession } from \"../utils/Session\";\nimport AccountCard from \"./AccountCard\";\nimport BroadcastMessage from \"./BroadcastMessage\";\nimport LogOutLocations from \"./LogOutLocations\";\n\nexport default function AccountBox() {\n\n const history = useHistory(); \n const [session, setSession] = useSession();\n const [trigger, setTrigger] = useState(false);\n\n const updateIdentity = (_identity) => {\n\n if(!_identity){\n return; \n }\n \n apiCall(\"session/setPicklistIdentity\", {identity : _identity }, (_status, _result) => {\n if(_status){\n setSession({...session, \"picklist_identity\" : _result.picklist_identity});\n } else {\n message.error(_result.error);\n }\n })\n }\n\n \n\n const drawCorps = () => { \n return session.available_corps.filter(item => item.name !== \"My Personal Account\").map(item => {\n return (<Select.Option key={item.id} value={item.id}>{item.name}</Select.Option>)\n })\n }\n\n const switchStore = (_id) =>{\n history.push(\"/reload\", {id: _id, path : history.location.pathname});\n }\n \n const logout = () =>{\n apiCall(\"account/logout\", {}, (_status, _result) =>{\n window.store_id = false; \n setSession(_result);\n })\n }\n\n const content = (\n <Space direction=\"vertical\">\n <label>Account</label>\n <Select onChange={(e) => switchStore(e)} defaultValue={session.store_id} style={{ width: 250 }}>\n {drawCorps()}\n </Select>\n <label>Your identity</label>\n <Input.Search placeholder=\"Create identity...\" onSearch={(e) => updateIdentity(e)} enterButton={<small>Save</small>} defaultValue={session.picklist_identity}></Input.Search>\n \n <BroadcastMessage trigger={trigger} />\n <Divider dashed style={{ \"margin\": \"5px 0px\" }} />\n <LogOutLocations trigger={trigger} />\n <Button onClick={() => logout()} danger type=\"primary\" block>Log out</Button>\n </Space>\n );\n\n return (\n <>\n <Popover onVisibleChange={(e) => { if(e) {\n setTrigger(!trigger);\n } }} placement=\"bottomRight\" content={content} trigger=\"click\"> \n <div style={{\"cursor\" : \"pointer\"}}><AccountCard store_name={session.picklist_identity} contact={session.contact} /></div>\n </Popover>\n </>\n );\n}","import React, { useEffect, useRef, useState } from \"react\";\nimport { Avatar, Badge, Popover, Space, Row, Col } from \"antd\";\nimport { NotificationOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport { useHistory } from \"react-router-dom\";\nimport { CloseCircleFilled } from '@ant-design/icons';\nimport moment from \"moment\";\nimport conditional from \"../tools/conditional\";\n\nexport default function Notifications() {\n\n const timeoutRef = useRef(null);\n\n const history = useHistory();\n const [vis, setVis] = useState(false);\n\n moment.updateLocale('en', {\n relativeTime: {\n future: \"+%s\",\n past: \"%s\",\n s: \"1s\",\n m: \"1m\",\n mm: \"%dm\",\n h: \"1h\",\n hh: \"%dh\",\n d: \"1d\",\n dd: \"%dd\",\n M: \"1mth\",\n MM: \"%dmths\",\n y: \"1y\",\n yy: \"%dy\"\n }\n });\n\n\n // {\n // \"recipient_id\": 101069,\n // \"id\": 10808,\n // \"message\": \"\",\n // \"message_type\": \"repshare_resyn\",\n // \"misc\": null,\n // \"visibility\": 3,\n // \"datecreated\": 1650385626,\n // \"datechanged\": 1650385626,\n // \"user\": {\n // \"id\": 554904,\n // \"name\": \"Michael Hunter\"\n // },\n // \"corp\": {\n // \"id\": 195194,\n // \"name\": \"BMA Sales Marketing Demo\"\n // }\n // },\n\n\n // repshare_ack\n // rem_repshare_ack\n // repshare_syn\n // rem_repshare_syn\n // repshare_resyn\n // rem_repshare_resyn\n\n const markSeen = (_id) => {\n apiCall(\"notification/markSeen\", { notification_id: _id }, (_status, _result) => {\n if (_status) {\n updateRow(_result);\n }\n })\n }\n\n const hideRow = (_id) => {\n apiCall(\"notification/hide\", { notification_id: _id }, (_status, _result) => {\n if (_status) {\n updateRow(_result);\n }\n })\n }\n\n\n const linkOut = (_type, _name) => {\n\n if(_type === \"repshare_syn\" || _type === \"repshare_resyn\" || \"rem_repshare_ack\"){\n history.push({ pathname: \"/purchasing/my-reps\", state: _name });\n } else {\n history.push(\"/purchasing/my-reps\")\n }\n \n }\n\n\n const buildNotification = (_note) => {\n let ret;\n let color = \"#fff\";\n switch (_note.message_type) {\n\n case \"repshare_ack\":\n if (_note.visibility !== 3) { color = (_note.misc.approved) ? \"#00aa5f\" : \"aa0000\"; }\n ret = <><strong>{_note.corp.name}</strong> has {(_note.misc.approved) ? <strong style={{ \"color\": color }}>accepted</strong> : <strong style={{ \"color\": color }}></strong>} declined your rep request.</>\n break;\n\n case \"rem_repshare_ack\":\n if (_note.visibility !== 3) { color = (_note.misc.approved) ? \"#00aa5f\" : \"aa0000\"; }\n ret = <>You have {(_note.misc.approved) ? <strong style={{ \"color\": color }}>accepted</strong> : <strong style={{ \"color\": color }}>declined </strong>} <strong>{_note.misc.request_contact.name}</strong> at <em>{_note.corp.name}'s</em> rep request.</>;\n break;\n\n case \"repshare_syn\":\n ret = <><strong>{_note.user.name}</strong> from <em>{_note.corp.name}</em> has sent you a rep request.</>;\n break;\n\n case \"rem_repshare_syn\":\n ret = <>You sent <strong>{_note.misc.request_contact.name}</strong> at <em>{_note.corp.name}</em> a rep request.</>\n break;\n\n case \"repshare_resyn\":\n ret = <><strong>{_note.user.name}</strong> from <em>{_note.corp.name}</em> has sent you a rep request.</>;\n break;\n\n case \"rem_repshare_resyn\":\n ret = <>You sent <strong>{_note.misc.request_contact.name}</strong> at <em>{_note.corp.name}</em> another rep request.</>\n break;\n\n }\n\n if (_note.visibility === 3) {\n return <div onMouseOut={() => markSeen(_note.id)} style={{ \"backgroundColor\": \"#f12a46\", \"fontSize\": \"12px\", \"color\": \"#fff\", \"padding\": \"4px 10px\", \"borderRadius\": \"3px\" }}>\n <div style={{ \"float\": \"right\", \"paddingLeft\": \"20px\" }}>\n <CloseCircleFilled onClick={() => hideRow(_note.id)} />\n </div>\n <Space>\n <div onClick={() => linkOut(_note.message_type, _note.user.name)}>{ret}</div>\n <div><small>{moment(_note.datechanged * 1000).fromNow()}</small></div>\n </Space>\n </div>\n }\n\n return <div style={{ \"padding\": \"4px 10px\", \"fontSize\": \"12px\", \"borderBottom\": \"1px solid #f1f1f1\", \"cursor\": \"pointer\" }} >\n <div style={{ \"float\": \"right\", \"paddingLeft\": \"20px\" }}>\n <CloseCircleFilled style={{ \"color\": \"#AAA\" }} onClick={() => hideRow(_note.id)} />\n </div>\n <Space>\n <div onClick={() =>linkOut(_note.message_type, _note.user.name)}>{ret}</div>\n <div><small style={{ \"color\": \"#AAA\" }}>{moment(_note.datechanged * 1000).fromNow()}</small></div>\n </Space>\n </div>;\n\n\n }\n\n\n const [results, setResults] = useState([]);\n\n const fetchNotifications = () => {\n apiCall(\"notification/getAll\", {}, (_status, _result) => {\n if (_status) {\n setResults(_result)\n }\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(fetchNotifications, 5 * 60 * 1000);\n })\n }\n\n useEffect(() => {\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n \n fetchNotifications(); \n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n\n }, [vis]);\n\n\n const updateRow = (_item) => {\n let _update = [...results];\n let _index = _update.findIndex(itm => itm.id === _item.id);\n _update[_index] = _item;\n setResults(_update);\n }\n\n\n\n\n\n\n const content = (\n <div style={{ \"maxHeight\": \"300px\", \"overflow\": \"hidden\", \"overflow\": \"auto\", \"paddingRight\": \"15px\" }}>\n <Space size={0} direction=\"vertical\">\n {results.filter(i => i.visibility !== 0).map((item, index) => {\n return (<div key={index}>{buildNotification(item)}</div>);\n })}\n </Space>\n </div>\n );\n\n const hasNotifications = (results.filter(i => i.visibility === 3).length > 0);\n\n return (\n <>\n <Popover overlayStyle={{ \"paddingTop\": \"25px\" }} onVisibleChange={(e) => setVis(e)} placement=\"bottomRight\" title={\"Notifications\"} content={content} trigger=\"click\">\n <conditional.true value={(hasNotifications)}>\n <Badge offset={[-1, 5]} style={{ \"boxShadow\": \"none\" }} className=\"dotnoborder\" color={\"#f12a46\"} >\n <Avatar size=\"small\" style={{ \"backgroundColor\": \"rgb(255,255,255,0.2)\", \"cursor\": \"pointer\" }} icon={<small><NotificationOutlined /></small>} />\n </Badge>\n </conditional.true>\n <conditional.true value={(!hasNotifications)}>\n <Avatar size=\"small\" style={{ \"backgroundColor\": \"rgb(255,255,255,0.2)\", \"cursor\": \"pointer\" }} icon={<small><NotificationOutlined /></small>} />\n </conditional.true>\n </Popover>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport default function ResizeText(props){\n\n const [inc, setInc] = useState(0);\n const history = useHistory(); \n \n\n let arr = [\"Nicola Valley Institute Of Technology (Merritt)\",\n \"School House Teaching Supplies Inc.\",\n \"Bainton's Tannery Outlet (Mad Hatter Bookstore)\",\n \"The Well Read Raccoon Books & Curiosities\",\n \"Variant Edition Graphic Novels + Comics\"]\n \n //let text = arr[inc];\n\n const {text = \"\"} = props; \n\n \n\n let fontSize = 19; \n if(text.length > 18){\n let per = 18 / text.length;\n //fontSize = fontSize * per; \n }\n\n return(<div onMouseDown={(e) => {\n if(e.button === 1 ){\n window.open(\"/\", \"_blank\");\n }\n }} onClick={() => history.push(\"/\")} style={{\"maxWidth\" : \"230px\", \"cursor\" : \"pointer\", \"lineHeight\" : \"18px\", \"textAlign\" : (text.length < 8) ? \"center\" : \"left\", \"fontWeight\" : \"600\", \"color\" : \"#fff\", \"fontSize\" : fontSize + \"px\"}}>{text}</div>)\n}","import React, { useState, useEffect } from \"react\";\nimport { Menu, Avatar, Space, Input, Select, Tag, Button, Upload, Row, Col, Divider, Tooltip, Badge } from 'antd';\nimport {\n SettingOutlined,\n EditOutlined,\n BarChartOutlined,\n DollarOutlined,\n ToolOutlined,\n ShoppingCartOutlined,\n CustomerServiceOutlined,\n MailOutlined,\n SelectOutlined,\n} from '@ant-design/icons';\n\nimport conditional from \"../tools/conditional\";\nimport logosmall from \"../media/logo.png\";\nimport logodark from \"../media/logo_dark.png\"\n\nimport AccountCard from \"./AccountCard\";\nimport { navigation } from \"../data\";\nimport { useHistory } from \"react-router-dom\";\nimport AccountBox from \"./AccountBox\";\nimport { getISBNCount, getFilterCount, objectToPath, pathToObject, handleTermSlash } from \"../utils/Utils\";\nimport Notifications from \"./Notifications\";\nimport { useSession } from \"../utils/Session\";\nimport { apiCall } from \"../utils/Api\";\nimport ResizeText from \"./ResizeText\";\nimport Cookies from \"js-cookie\";\n\nexport default function Nav2(props) {\n\n\n const history = useHistory();\n const [collapsed, setCollapsed] = useState(true);\n const [opened, setOpened] = useState(\"\");\n const [selected, setSelected] = useState(\"\");\n const [session, setSession] = useSession();\n const [processing, setProcessing] = useState(false);\n\n\n\n // const getSearchType = () => {\n // if (history.location.pathname.includes(\"/k/\")) {\n\n // let _arr = history.location.pathname.split(\"/k/\");\n // if (_arr.length > 1) {\n // let _spt = _arr[1].split(\"/\");\n // if (_spt.length > 0) {\n // return _spt[0];\n // } else {\n // return _arr[1];\n // }\n // }\n\n // } else {\n // return \"keyword\";\n // }\n // }\n\n\n\n\n\n // document.addEventListener('keypress', e => {\n // //usually scanners throw an 'Enter' key at the end of read\n // if (e.keyCode === 13) {\n // if(code.length > 10) {\n // console.log(code);\n // /// code ready to use \n // code = \"\";\n // }\n // } else {\n // code += e.key; //while this is not an 'enter' it stores the every key \n // }\n\n // //run a timeout of 200ms at the first read and clear everything\n // if(!reading) {\n // reading = true;\n // setTimeout(() => {\n // code = \"\";\n // reading = false;\n // }, 200); //200 works fine for me but you can adjust it\n // }\n // });\n\n\n const isTextArea = () => {\n\n if(document.activeElement instanceof HTMLTextAreaElement || document.activeElement instanceof HTMLInputElement){\n return true; \n } else {\n return false; \n }\n\n }\n\n\n\n // BARCODE SCANNER\n let inputString = \"\";\n let reading = false;\n useEffect(() => {\n function handleScan(event) {\n\n \n \n\n\n if (event.key === \"~\") {\n\n if(isTextArea()){\n event.preventDefault();\n event.stopPropagation();\n return; \n }\n\n\n inputString = \"\";\n reading = true;\n setTimeout(() => {\n reading = false;\n }, 1500)\n } else if (event.key === \"Enter\") {\n if (reading) {\n setKeyword(inputString);\n linkToBrowse(inputString, true);\n reading = false;\n }\n } else {\n if (reading) {\n inputString += (event.key === \"Shift\") ? \"\" : event.key;\n }\n }\n }\n\n document.addEventListener('keydown', handleScan, true);\n return () => {\n document.removeEventListener('keydown', handleScan, true);\n };\n }, []);\n\n\n\n const getTerm = () => {\n if (history.location.pathname.includes(\"/t/\")) {\n\n let _arr = history.location.pathname.split(\"/t/\");\n if (_arr.length > 1) {\n let _spt = _arr[1].split(\"/\");\n if (_spt.length > 0) {\n return handleTermSlash(_spt[0], false);\n } else {\n return handleTermSlash(_arr[1], false);\n }\n }\n\n } else {\n return \"\";\n }\n }\n\n const [keyword, setKeyword] = useState(getTerm());\n\n const [searchType, setSearchType] = useState(\"keyword\");\n\n\n const selectBefore = (\n\n <Select onChange={(_v) => setSearchType(_v)} style={{ \"border\": \"none\", \"width\": \"90px\" }} defaultValue={searchType}>\n <Select.Option key=\"keyword\" value=\"keyword\"><small>Keyword</small></Select.Option>\n <Select.Option key=\"title\" value=\"title\"><small>Title</small></Select.Option>\n <Select.Option key=\"author\" value=\"author\"><small>Author</small></Select.Option>\n <Select.Option key=\"publisher\" value=\"publisher\"><small>Publisher</small></Select.Option>\n <Select.Option key=\"url\" value=\"url\"><small>URL</small></Select.Option>\n <Select.Option key=\"file\" value=\"file\"><small>File</small></Select.Option>\n </Select>\n\n );\n\n\n const resetKeyword = () => {\n setKeyword(getTerm());\n }\n\n useEffect(resetKeyword, [history.location.pathname]);\n\n\n\n const hadBetaAccess = (_item, _init) => {\n // first check beta\n if (_item.hasOwnProperty(\"beta\")) {\n if (!window.sitesettings.beta_access[_item.beta]) {\n return false;\n }\n } else {\n return _init;\n }\n }\n\n const hasPermission = (_item) => {\n // ensure permission exists on nav item and is in session\n if (_item.hasOwnProperty(\"permission\")) {\n let has = true;\n _item.permission.forEach(element => {\n if (session.permissions.hasOwnProperty(element) && !session.permissions[element]) {\n has = false;\n }\n });\n return has;\n }\n\n return true;\n }\n\n\n const checkCondition = (_navItem) => { \n if(_navItem.hasOwnProperty(\"condition\")){\n return window.sitesettings[_navItem.condition];\n } \n return true; \n }\n\n const drawMenu = () => {\n return navigation.map((item) => {\n\n\n \n\n return (\n <Menu.SubMenu style={{ \"padding\": \"0px 9px\" }} onTitleClick={() => setOpened(item.slug)} key={item.slug} icon={getIcon(item.slug)} title={item.name}>\n {item.subnav.filter(item => checkCondition(item)).map((_item) => {\n\n let access = _item.active;\n if (access) {\n access = hadBetaAccess(_item, access)\n if (access) {\n access = hasPermission(_item);\n }\n }\n // check hide flag\n if (!access && _item.hasOwnProperty(\"hide\")) {\n return (<></>)\n }\n\n return (<Menu.Item disabled={(!access)} onMouseDown={(e) => {\n if (e.button === 1 && access) {\n linkToPage(_item, true);\n }\n }} onClick={() => linkToPage(_item)} key={_item.slug}>\n\n <Tooltip title={(!hasPermission(_item)) ? <small>Your login does not have permission to access this area. Please login with a different account that has access, or go to the Settings → Permissions menu to modify which accounts have access to specific areas.</small> : \"\"}>{_item.name} </Tooltip>\n\n {(_item.hasOwnProperty(\"link\") && <small> <SelectOutlined style={{ \"transform\": \"scaleX(-1)\", \"fontSize\": \"12px\" }} /></small>)}</Menu.Item>)\n })}\n </Menu.SubMenu>\n )\n })\n }\n\n const getIcon = (_slug) => {\n\n return (<></>);\n\n switch (_slug) {\n case \"settings\":\n return (<SettingOutlined />);\n case \"content\":\n return (<EditOutlined />);\n case \"reports\":\n return (<BarChartOutlined />);\n case \"purchasing\":\n return (<DollarOutlined />);\n case \"tools\":\n return (<ToolOutlined />);\n case \"support\":\n return (<CustomerServiceOutlined />);\n }\n }\n\n const linkToPage = (_item, _newtab = false) => {\n\n\n if (_item.hasOwnProperty(\"link\")) {\n window.open(_item.slug, \"_blank\");\n return;\n }\n\n // Route defaults for browse, mylist, categories\n let _retpath = _item.slug;\n let _pushstate = false;\n\n\n switch (_item.slug) {\n case \"status\":\n _pushstate = true;\n apiCall(\"toolbox/pingUsed\", { id: session.filter_preset_defaults.status.id }, () => { });\n _retpath = \"purchasing/browse\" + objectToPath(session.filter_preset_defaults.status.selections);\n break;\n\n case \"listcat\":\n _pushstate = true;\n apiCall(\"toolbox/pingUsed\", { id: session.filter_preset_defaults.listcat.id }, () => { });\n _retpath = \"purchasing/catalogues\" + objectToPath(session.filter_preset_defaults.listcat.selections);\n break;\n\n case \"mylists\":\n _pushstate = true;\n apiCall(\"toolbox/pingUsed\", { id: session.filter_preset_defaults.mylists.id }, () => { });\n _retpath = \"purchasing/my-lists\" + objectToPath(session.filter_preset_defaults.mylists.selections);\n break;\n\n }\n\n setSelected(_retpath);\n\n if (_newtab) {\n window.open(\"/\" + _retpath, \"_blank\");\n }\n\n if (_pushstate) {\n history.push({ pathname: \"/\" + _retpath, state: true });\n } else {\n history.push({ pathname: \"/\" + _retpath });\n }\n\n }\n\n const generateFile = (_val) => {\n var filename = 'pasted.txt';\n let _file = new File([new Blob([_val])], filename)\n let f = {}\n f.file = _file;\n return f;\n }\n\n const getCacheKeyForFile = (_file) => {\n setProcessing(true);\n apiCall(\"browse/getCacheKeyForFile\", { file: _file.file }, (_status, _result) => {\n if (_status) {\n history.push({ pathname: \"/purchasing/browse/filter/v/sequence/x/\" + _result.id, state: Math.random().toString() })\n }\n setProcessing(false);\n });\n }\n\n const convertURL = (_url) => {\n apiCall(\"url_converter/convertCustomerUrlToBiz\", { url: _url }, (_status, _result) => {\n if (_status) {\n // history.push(_result.url);\n history.push({ pathname: _result.url, state: Math.random().toString() })\n } else {\n linkToBrowse(_url, false, true);\n }\n })\n }\n\n const linkToBrowse = (_val, _clear = false, _skipURL = false) => {\n\n\n \n\n\n if (!_skipURL && (_val.substr(0, 5) === \"http:\" || _val.substr(0, 6) === \"https:\")) {\n convertURL(_val);\n return;\n }\n\n _val = handleTermSlash(_val, true);\n\n // if search contains 1 or more ISBNS \n if (getISBNCount(_val) > 1) {\n getCacheKeyForFile(generateFile(_val));\n return;\n }\n\n\n\n\n let _pathname = \"\";\n if (_val) {\n\n if (history.location.pathname.includes(\"browse/filter\") && !_clear) {\n let obj = pathToObject(history.location.pathname);\n \n obj.v = \"\"\n obj.x = \"\";\n obj.t = _val;\n\n if (!obj.hasOwnProperty(\"k\")) {\n if (searchType !== \"keyword\") {\n obj.k = searchType;\n _pathname = \"/purchasing/browse\" + objectToPath(obj);\n }\n } else {\n obj.k = searchType;\n _pathname = \"/purchasing/browse\" + objectToPath(obj);\n }\n\n } else {\n\n let sort = (Cookies.get(\"default_search_sort\") !== undefined) ? Cookies.get(\"default_search_sort\") : \"in_store\";\n if(sort){\n sort = \"/v/\" + sort\n }\n \n //_pathname = \"/purchasing/browse/filter/t/\" + _val;\n // Default sort and filter for cleared header searches\n _pathname = \"/purchasing/browse/filter/a/active\"+sort+\"/t/\" + _val;\n if (searchType !== \"keyword\") {\n _pathname += \"/k/\" + searchType;\n }\n }\n\n } else {\n _pathname = \"/purchasing/browse\";\n history.push(\"/purchasing/browse\");\n }\n\n\n\n history.push({ pathname: _pathname, state: _val + Math.random().toString() })\n\n }\n\n const drawClearFilters = () => {\n\n // Removed \n return false;\n\n if (getFilterCount(history.location.pathname) && keyword) {\n\n return <div>  <Tag onClick={() => linkToBrowse(keyword, true)} style={{ \"cursor\": \"pointer\", \"marginRight\": \"0px\" }} color=\"orange\">Clear filters</Tag></div>\n // return(<div style={{\"borderLeft\" : \"1px solid #eee\"}}>  <Checkbox checked={(clearFilters)} onChange={() => setClearFilters(!clearFilters)} ><small style={{\"color\" : \"#aaa\", \"fontWeight\" : \"600\"}}>Clear filters?</small></Checkbox></div>)\n } else {\n return \"\";\n }\n\n }\n\n const getCurrentKey = () => {\n\n\n\n if (history.location.pathname.includes(\"purchasing/browse\")) {\n return \"status\";\n }\n\n if (history.location.pathname.includes(\"purchasing/catalogues\")) {\n return \"listcat\";\n }\n\n if (history.location.pathname.includes(\"purchasing/my-lists\")) {\n return \"mylists\"\n }\n\n\n\n let m = history.location.pathname.split(\"/\");\n let s = \"\";\n if (m.length > 1) {\n\n s = m[m.length - 2] + \"/\" + m[m.length - 1];\n\n }\n return s;\n }\n\n return (\n <div >\n\n {/* <div style={{ \"float\": \"right\" }}>\n <Space size={0}>\n <div onClick={() => history.push(\"/purchasing/cart\")}><Avatar size=\"small\" style={{ \"backgroundColor\": \"rgb(255,255,255,0.2)\", \"cursor\": \"pointer\" }} icon={<ShoppingCartOutlined />} /></div>\n <div style={{ \"width\": \"13px\" }}> </div>\n <Notifications />\n <AccountBox />\n </Space>\n </div> */}\n\n <Row align=\"middle\" >\n <Col style={{ \"maxWidth\": \"230px\" }}><ResizeText text={session.store_name} /></Col>\n <Col flex={\"8px\"}><div style={{ \"color\": \"#888\", \"textAlign\": \"right\" }}> </div></Col>\n <Col style={{ \"maxWidth\": \"390px\" }} flex={\"390px\"}><Menu style={{ \"width\": \"390px\" }} selectedKeys={[getCurrentKey()]} mode=\"horizontal\" theme=\"dark\" >{drawMenu()}</Menu></Col>\n <Col flex={\"auto\"} >\n\n\n {/* {(searchType === \"file\" && <>\n <Input.Search className=\"clean-input\" style={{ \"minWidth\": \"100px\", \"maxWidth\": \"450px\" }} enterButton disabled addonAfter={<div style={{ \"display\": \"inline-block\", \"position\": \"relative\", \"right\": \"193px\", \"width\": \"0px\" }}><Upload showUploadList={false} customRequest={(_file) => getCacheKeyForFile(_file)}><Button loading={processing} disabled={(processing)} type=\"primary\" size=\"small\"><small>Choose a file <small>  (max 50MB)</small></small></Button></Upload></div>} value={keyword} addonBefore={selectBefore} />\n </>)} */}\n\n {(searchType === \"file\" && <>\n\n <div className=\"group-addon drag-selector\" style={{\"display\" : \"flex\"}}>\n {selectBefore}\n <div style={{\"width\" : \"100px\", \"maxHeight\" : \"30px\"}}>\n <Upload.Dragger showUploadList={false} customRequest={(_file) => getCacheKeyForFile(_file)}>\n Drag file or click to upload...\n </Upload.Dragger>\n </div>\n </div>\n \n\n </>)}\n\n {(searchType !== \"file\" && <>\n\n {/* value={keyword} removed by Kellynda 1157 */}\n <Input.Search value={keyword} addonBefore={selectBefore} suffix={drawClearFilters()} onChange={(e) => setKeyword(e.target.value)} onSearch={(e) => linkToBrowse(e, true)} className=\"clean-input\" allowClear enterButton placeholder=\"Keywords, author, title or series...\" style={{ \"minWidth\": \"100px\", \"maxWidth\": \"450px\" }} />\n </>)}\n\n </Col>\n <Col flex={\"8px\"}><div style={{ \"color\": \"#888\", \"textAlign\": \"right\" }}> </div></Col>\n <Col flex={\"210px\"} style={{ \"maxWidth\": \"230px\" }}>\n <div style={{ \"float\": \"right\" }}>\n <Space size={0}>\n \n <Badge style={{\"boxShadow\" : \"none\"}} dot={(session.cart.length>0)}><div onClick={() => history.push(\"/purchasing/cart\")}><Avatar size=\"small\" style={{ \"backgroundColor\": \"rgb(255,255,255,0.2)\", \"cursor\": \"pointer\" }} icon={<ShoppingCartOutlined />} /></div></Badge>\n <div style={{ \"width\": \"7px\" }}> </div>\n <Notifications />\n <AccountBox />\n </Space>\n </div>\n </Col>\n\n </Row>\n\n <br clear=\"all\" />\n </div>\n )\n}","/*\n\nDefault Layout - Wraps sections with nav, footer etc\n\n*/\n\nimport React, { useEffect } from \"react\";\nimport { Layout, Breadcrumb, BackTop, Button, Alert, Result, Modal } from 'antd';\nimport { LockOutlined } from '@ant-design/icons';\nimport Nav2 from \"../components/Nav2\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { ucfirst } from \"../utils/Utils\";\nimport { ArrowUpOutlined } from '@ant-design/icons';\nimport { navigation } from \"../data.js\";\nimport { useSession } from \"../utils/Session\";\nexport default function Default(props) {\n\n const { drawDarkMode = () => { } } = props;\n\n const loc = useLocation();\n const history = useHistory();\n const [session, setSession] = useSession();\n\n const hasBanner = (window.sitesettings.banner_message.text || window.sitesettings.admin_url) ? true: false;\n\n const checkResolution = () => {\n\n if (window.innerWidth < 500) {\n\n Modal.confirm({\n title: \"Set scale\",\n onOk: () => {\n let scale = window.innerWidth / 1300;\n document.querySelector(\"meta[name=viewport]\").setAttribute('content', 'width=device-width, initial-scale=' + 0.5 + ', maximum-scale=1.0, user-scalable=0');\n }\n })\n }\n\n }\n //useEffect(checkResolution, [])\n\n\n\n const checkPermission = () => {\n let has_permission = true;\n Object.keys(navigation).forEach(menu => {\n let { subnav = [] } = navigation[menu];\n subnav.forEach(item => {\n if (item.hasOwnProperty(\"permission\")) {\n if (loc.pathname.includes(item.slug)) {\n\n if (session.hasOwnProperty(item.permission)) {\n if (!session[item.permission]) has_permission = false;\n }\n\n if (session.permissions.hasOwnProperty(item.permission)) {\n if (!session.permissions[item.permission]) has_permission = false;\n }\n\n }\n }\n })\n })\n return has_permission;\n }\n\n const drawPath = (_p) => {\n\n if (_p.includes(\"/filter\")) {\n // cull filters from breadcrumbs\n _p = _p.split(\"/filter\")[0];\n }\n\n let items = _p.split(\"/\");\n let title = \"\";\n items.forEach((element, index) => {\n if (index === 1) {\n title += ucfirst(element) + \" > \";\n } else {\n title += ucfirst(element) + \" \";\n }\n });\n\n document.title = title;\n\n return items.map((itm, ind) => {\n if (itm === \"\") {\n return <Breadcrumb.Item key={ind}></Breadcrumb.Item>\n } else {\n return <Breadcrumb.Item key={ind}>{ucfirst(itm)}</Breadcrumb.Item>\n }\n })\n }\n\n\n const drawNoPermission = () => {\n\n let ret = <small>Your login does not have permission to access this area. Please login with a different account that has access.</small>\n if (session.permissions.edit) {\n ret = <small>Your login does not have permission to access this area. Please login with a different account that has access, or go to the <a onClick={() => history.push(\"/settings/permissions\")}>Settings → Permissions</a> menu to modify which accounts have access to specific areas.</small>\n }\n\n return (\n <>\n <Result\n\n icon={<LockOutlined />}\n title={ret}\n extra={\n <Button onClick={() => history.push(\"/\")} type=\"primary\" key=\"console\">\n Home\n </Button>\n }\n />\n </>\n )\n }\n\n\n\n const drawMessage = () => {\n\n \n\n if (window.sitesettings?.banner_message) {\n if (window.sitesettings.banner_message.text) {\n\n let { type = \"success\", link = \"\", text = \"\" } = window.sitesettings.banner_message;\n\n let _color = \"#f00\";\n let _txt = \"#fff\";\n switch (type) {\n case \"warning\":\n _color = \"#ffa200\";\n _txt = \"#000\";\n break;\n case \"error\":\n _color = \"#e00000\";\n break;\n case \"info\":\n _color = \"#1465c8\";\n break;\n default:\n _color = \"#2eb000\";\n break;\n }\n\n \n\n return (\n <Alert\n onClick={() => { if (link) { window.open(link) } }}\n className=\"switchbanner\"\n message={<div style={{ \"textAlign\": \"center\" }}>\n <small style={{ \"color\": _txt }}>{text}</small>\n </div>}\n banner\n style={{ \"cursor\": (link) ? \"pointer\" : \"default\", \"color\": \"#fff\", \"backgroundColor\": _color, \"borderLeft\": \"0px\", \"borderRight\": \"0px\", \"position\": \"fixed\", \"zIndex\": \"1000\", \"height\": \"30px\", \"width\": \"100%\" }}\n showIcon={false}\n\n type={type}\n />\n )\n }\n }\n\n return (\n <>\n <Alert\n className=\"switchbanner\"\n message={<div style={{ \"textAlign\": \"center\" }}>\n <small>Having trouble? <a onClick={() => window.open(window.sitesettings.admin_url)}>Click here</a> to return to the legacy website.</small>\n </div>}\n banner\n style={{ \"borderLeft\": \"0px\", \"borderRight\": \"0px\", \"position\": \"fixed\", \"zIndex\": \"1000\", \"height\": \"30px\", \"width\": \"100%\" }}\n showIcon={false}\n type=\"success\"\n />\n </>\n )\n\n }\n\n\n\n\n return (\n <>\n {drawDarkMode()}\n <BackTop style={{ \"right\": \"0px\", \"bottom\": \"10px\" }}>\n <Button size=\"small\" shape=\"circle\" icon={<ArrowUpOutlined />} />\n </BackTop>\n\n {(hasBanner && <>{drawMessage()}</>)}\n\n <div className=\"navWrapper\" style={{top : (hasBanner) ? \"30px\" : \"0px\"}}>\n <div style={{ \"width\": \"1240px\", \"margin\": \"0 auto\" }}>\n\n <Nav2 dark={props.dark} />\n </div>\n </div>\n <div style={{ \"height\": (hasBanner) ? \"85px\" : \"55px\", \"display\": \"block\" }} />\n <Layout>\n <Layout.Content>\n <div style={{ \"height\": \"calc(100vh - 85px)\", \"minWidth\": \"1310px\", \"maxWidth\": \"1310px\", \"margin\": \"0 auto\", \"padding\": \"0 35px\" }}>\n <div className=\"shim\" /><div className=\"shim\" />\n <Breadcrumb style={{ \"fontSize\": \"12px\", \"fontWeight\": \"500\", \"padding\": \"5px 15px\" }}>\n {drawPath(loc.pathname)}\n </Breadcrumb>\n <div className=\"shim\" /><div className=\"shim\" />\n <div className={(props.noborder) ? \"\" : \"layoutWrapper\"} style={{ \"marginBottom\": \"20px\" }}>\n\n {(checkPermission()) ? props.children : drawNoPermission()}\n\n </div>\n <div style={{ \"fontSize\": \"12px\", \"fontWeight\": \"500\", \"padding\": \"5px 15px\" }}></div>\n </div>\n </Layout.Content>\n </Layout>\n\n </>\n );\n\n}","/*\n\nDefault Layout - Wraps sections with nav, footer etc\n\n*/\n\nimport React, { useState } from \"react\";\nimport { Layout, Divider, Menu, Space, Button } from 'antd';\nimport logosmall from \"../media/logo.png\";\nimport AccountCard from \"../components/AccountCard\";\nimport { useHistory } from \"react-router-dom\";\nimport { navigation } from \"../data\";\n\n\nimport {\n SettingOutlined,\n EditOutlined,\n BarChartOutlined,\n DollarOutlined,\n ToolOutlined,\n CustomerServiceOutlined,\n MenuOutlined\n} from '@ant-design/icons';\n\n\nexport default function Left(props) {\n\n const history = useHistory();\n\n const { collapsed = false, setCollapsed = () =>{} } = props;\n const [opened, setOpened] = useState(\"\");\n const [, setSelected] = useState(\"\");\n\n\n const getIcon = (_slug) => {\n switch (_slug) {\n case \"settings\":\n return (<SettingOutlined style={{ \"color\": \"#999\" }} />);\n case \"content\":\n return (<EditOutlined style={{ \"color\": \"#999\" }} />);\n case \"reports\":\n return (<BarChartOutlined style={{ \"color\": \"#999\" }} />);\n case \"purchasing\":\n return (<DollarOutlined style={{ \"color\": \"#999\" }} />);\n case \"tools\":\n return (<ToolOutlined style={{ \"color\": \"#999\" }} />);\n case \"support\":\n return (<CustomerServiceOutlined style={{ \"color\": \"#999\" }} />);\n }\n }\n\n const linkToPage = (_slug) => {\n\n setSelected(_slug);\n history.push(\"/\" + _slug);\n }\n\n\n const openItem = (_slug) => {\n\n setCollapsed(false);\n if (opened !== _slug) {\n setOpened(_slug);\n } else {\n setOpened(false)\n }\n\n }\n\n const drawMenu = () => {\n return navigation.map((item) => {\n return (\n <Menu.SubMenu onTitleClick={() => openItem(item.slug)} key={item.slug} icon={getIcon(item.slug)} title={item.name}>\n {item.subnav.map((_item) => {\n return (<Menu.Item onClick={() => linkToPage(_item.slug)} key={_item.slug}>{_item.name}</Menu.Item>)\n })}\n </Menu.SubMenu>\n )\n })\n }\n\n\n const navEnter = () => {\n setCollapsed(false);\n }\n\n const navOut = () => {\n setCollapsed(true);\n }\n\n\n\n\n // const setSize = () =>{\n // if (window.innerWidth > 1700) {\n // if (collapsed) {\n // console.log(collapsed)\n\n // setCollapsed(false);\n // }\n // } else {\n // if (!collapsed) {\n // console.log(\"close\")\n // setCollapsed(true);\n // }\n // }\n // }\n\n // const checkSize = () => {\n\n // window.addEventListener('resize', setSize);\n\n // }\n // useEffect(checkSize, [])\n\n\n\n return (\n <>\n {/* <div className=\"flourish\" style={{ \"display\": \"block\", \"height\": \"5px\" }}></div> */}\n\n <div className=\"show-block\" style={{ \"cursor\": \"pointer\", \"textAlign\": \"left\", \"backgroundColor\": \"#001529\" }}>\n <Space>\n\n <div>\n\n <img alt=\"bookmanager\" style={{ \"margin\": \"16px 16px\" }} width={171} src={logosmall} />\n\n </div>\n\n\n <Button style={{ \"color\": \"#fff\" }} icon={<MenuOutlined />} type=\"text\"></Button>\n\n\n\n </Space>\n <div style={{ \"float\": \"right\", \"paddingTop\": \"13px\" }}>\n <AccountCard />\n </div>\n <Divider style={{ \"margin\": \"0px\", \"padding\": \"0px\" }} />\n </div>\n\n <Layout hasSider style={{ \"height\": \"calc(100vh)\", \"overflow\": \"hidden\" }}>\n\n\n\n\n <Layout.Sider trigger={<AccountCard collapsed={collapsed} />} onMouseEnter={() => navEnter()} onMouseLeave={() => navOut()} collapsedWidth={60} width={235} onCollapse={(e) => setCollapsed(e)} collapsible collapsed={collapsed} defaultCollapsed className=\"hide\" style={{ \"backgroundColor\": \"#001529\" }}>\n <div style={{ \"height\": \"100vh\", \"overflow\": \"auto\" }}>\n\n\n <div className=\"shim\"></div>\n <div style={{ \"cursor\": \"pointer\", \"textAlign\": \"left\", \"padding\": \"3px 0px\" }}>\n\n <img onClick={() => history.push(\"/\")} alt=\"bookmanager\" style={{ \"transition\": \"margin 300ms\", \"margin\": (collapsed) ? \"20px 14px\" : \"20px 21px\" }} width={171} src={logosmall} />\n\n\n </div>\n <Divider style={{ \"margin\": \"0px\", \"padding\": \"0px\" }} />\n <div className=\"shim\"></div>\n\n <Menu\n triggerSubMenuAction={[\"click\"]}\n mode=\"inline\"\n theme=\"dark\"\n style={{ \"backgroundColor\": \"#0d152b\", \"border\": \"none\" }}\n openKeys={[opened]}\n\n\n\n\n >\n {drawMenu()}\n\n </Menu>\n\n </div>\n </Layout.Sider>\n\n\n\n\n {/* <Anchor.Link href=\"#general\" title=\"General\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#accounts\" title=\"Accounts\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#ordering\" title=\"Ordering\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#shipping\" title=\"Shipping\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#searching\" title=\"Searching\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#pricing\" title=\"Pricing\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#payments\" title=\"Payments\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#hours\" title=\"Hours\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#multistore\" title=\"Multi-Store\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#seo\" title=\"SEO\" /><div className=\"shim\"></div>\n <Anchor.Link href=\"#advanced\" title=\"Advanced\" /><div className=\"shim\"></div> */}\n\n\n\n\n <Layout.Content style={{ \"backgroundColor\": \"#fff\", \"borderleft\": \"1px solid #eee\", \"height\": \"100vh\", \"overflow\": \"auto\" }}>\n <div style={{ \"padding\": \"0px\", \"backgroundColor\": \"#fff\" }}>\n\n {props.children}\n\n </div>\n </Layout.Content>\n {/* <Divider style={{ \"margin\": \"0px\", \"padding\": \"0px\" }} />\n <Layout.Footer style={{ \"backgroundColor\": \"#fff\", \"padding\": \"13px 50px\" }}>Footer</Layout.Footer> */}\n\n </Layout>\n </>\n );\n\n}","export default __webpack_public_path__ + \"static/media/logo_light.cd082fb2.png\";","export default __webpack_public_path__ + \"static/media/bg.3f7260ed.jpg\";","import React, { useEffect, useState } from \"react\";\nimport { Layout, Form, Checkbox, Typography, Divider, Menu, Affix, Space, Button, Row, Col, Switch, Radio, Input, Card, Alert } from 'antd';\nimport conditional from \"../tools/conditional\";\nimport logosmall from \"../media/logo_light.png\";\nimport logodark from \"../media/logo_dark.png\";\nimport bg from \"../media/bg.jpg\";\nimport { useHistory } from \"react-router\";\nimport { apiCall } from \"../utils/Api\";\nimport { useSession } from \"../utils/Session\";\nimport { objectToPath } from \"../utils/Utils\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport Cookies from 'js-cookie';\n\nexport default function LoginLayout(props) {\n\n const { redirect = \"\", setRedirect = () => { } } = props;\n const [session, setSession] = useSession();\n const [error, setError] = useState(\"\");\n const [forgot, setForgot] = useState(false);\n const [forgotError, setForgotError] = useState(\"\");\n const [forgotSuccess, setForgotSuccess] = useState(\"\");\n const history = useHistory();\n\n\n\n \n\n const login = (_f) => {\n\n let obj = {\n password: _f.password,\n }\n\n if (_f.email_address.includes(\"@\")) {\n obj.email_address = _f.email_address;\n } else {\n\n if (_f.email_address.length !== 7) {\n setError(\"Use your email address or a 7 digit SAN.\");\n return;\n }\n obj.san = _f.email_address;\n }\n\n if (error) {\n setError(\"\");\n }\n\n setRedirect((redirect && redirect !== \"/\") ? redirect : \"\")\n apiCall(\"account/login\", obj, (_status, _result) => {\n if (_status) {\n window.store_id = _result.store_id;\n apiCall(\"store/getSettings\", {}, (_s, _r) => {\n if (_s) {\n window.sitesettings = _r;\n setSession(_result);\n if(redirect.length > 2){\n history.push(redirect)\n }\n }\n })\n } else {\n setError(_result.error);\n }\n })\n\n }\n\n\n const recoverPassword = (_f) => {\n\n apiCall(\"account/emailPasswordToken\", { email_address: _f.email_address }, (_status, _result) => {\n if (_status) {\n setForgotSuccess(<>If you have an existing account you will receive an email confirmation with a link to reset your password.</>)\n } else {\n setForgotError(_result.error)\n }\n })\n\n }\n\n const resetForgot = () => {\n setForgotSuccess(\"\");\n setForgotError(\"\")\n setForgot(false);\n }\n\n const drawForgotPassword = () => {\n\n return (\n\n <>\n <div className=\"shim\" style={{ \"minHeight\": \"120px\", \"height\": \"calc(50vh - 250px)\" }}></div>\n <Card headStyle={{ \"borderBottom\": (!props.dark) ? \"1px solid #e6e6e6\" : \"1px solid #333333\" }} title={<span className=\"c\">{(forgotSuccess) ? \"Success\" : \"Forgot password\"}</span>} extra={<><CloseOutlined onClick={() => resetForgot(false)} /></>} hoverable style={{ \"width\": \"310px\", \"margin\": \"0 auto\", \"border\": \"1px solid #e6e6e6\", \"cursor\": \"default\" }}>\n <div style={{ \"width\": \"250px\", \"margin\": \"0 auto\" }}>\n\n <conditional.true value={(!forgotSuccess)}>\n <div style={{ \"width\": \"250px\", \"textAlign\": \"left\" }}>\n <span style={{ \"paddingLeft\": \"0px\" }}>\n <p>\n To retrieve the account's password, we need to send an email to the address associated with your account.\n </p>\n </span>\n </div>\n </conditional.true>\n\n <Form onFinish={(_f) => recoverPassword(_f)} layout=\"vertical\">\n <div style={{ \"opacity\": (forgotSuccess) ? \"0.5\" : \"1\" }}>\n <Form.Item label=\"Email address\" name=\"email_address\" rules={[{ required: true, message: <small>Please input your email or san.</small> }]}>\n <Input disabled={(forgotSuccess)} placeholder=\"Email address...\" />\n </Form.Item>\n </div>\n\n <conditional.true value={(forgotError && !forgotSuccess)}>\n <Alert\n style={{ \"marginBottom\": \"20px\", \"padding\": \"10px 10px\" }}\n description={<>{forgotError}</>}\n type=\"error\"\n />\n </conditional.true>\n <conditional.true value={(forgotSuccess)}>\n <Alert\n \n style={{ \"marginBottom\": \"20px\", \"padding\": \"10px 10px\" }}\n description={<><strong>Success</strong><br /><div className=\"shim\" />{forgotSuccess}</>}\n type=\"success\"\n />\n </conditional.true>\n\n <div style={{ \"float\": \"right\" }}>\n {(forgotSuccess) ? <Button onClick={() => resetForgot()} type=\"primary\" >Close</Button> : <Button type=\"primary\" htmlType=\"submit\">Retrieve</Button>}\n </div>\n </Form>\n </div>\n </Card>\n\n\n </>)\n }\n\n const returnToV1 = () => {\n Cookies.remove(\"last_domain\", { domain: \".bookmanager.com\" });\n window.location.href = \"https://bookmanager.com\";\n }\n\n\n if (forgot) {\n return drawForgotPassword();\n }\n\n return (\n <>\n <div className=\"shim\" style={{ \"minHeight\": \"120px\", \"height\": \"calc(50vh - 250px)\" }}></div>\n <Card hoverable style={{ \"width\": \"310px\", \"margin\": \"0 auto\", \"border\": \"1px solid #e6e6e6\", \"cursor\": \"default\" }}>\n <div style={{ \"width\": \"250px\", \"margin\": \"0 auto\" }}>\n <div style={{ \"width\": \"250px\", \"textAlign\": \"left\" }}>\n <img alt=\"bookmanager\" style={{ \"marginLeft\": \"28px\", \"height\": \"43px\" }} width={180} src={(props.dark) ? logodark : logosmall} />\n <span style={{ \"paddingLeft\": \"0px\" }}>\n\n {/* <h4 style={{ \"display\": \"inline-block\", \"fontSize\": \"15px\", \"color\": \"#111\" }}>Bookmanager Admin</h4> */}\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n\n </span>\n </div>\n\n <Form onFinish={(_f) => login(_f)} layout=\"vertical\">\n <Form.Item label=\"Email address / SAN\" name=\"email_address\" rules={[{ required: true, message: <small>Please input your email or san.</small> }]}>\n <Input placeholder=\"Email address...\" />\n </Form.Item>\n <Form.Item label=\"Password\" name=\"password\" rules={[{ required: true, message: <small>Please input your password.</small> }]}>\n <Input.Password placeholder=\"Password...\" />\n </Form.Item>\n <Form.Item name=\"remember\" valuePropName=\"checked\">\n <a onClick={() => setForgot(true)}>Forgot Password?</a>\n </Form.Item>\n <conditional.true value={(error)}>\n <Alert\n style={{ \"marginBottom\": \"20px\", \"padding\": \"10px 10px\" }}\n description={<>{error} <div style={{ \"lineHeight\": \"14px\" }}><div className=\"shim\" /><small>Having trouble? Please contact <a href=\"mailto:mail@bookmanager.com\">mail@bookmanager.com</a>.</small></div></>}\n\n closable\n type=\"error\"\n />\n </conditional.true>\n <div style={{ \"float\": \"right\" }}>\n <Button type=\"primary\" htmlType=\"submit\">Sign in</Button>\n </div>\n </Form>\n </div>\n\t\t\t\t<div style={{\"width\": \"250px\", \"float\": \"right\", \"padding\": \"20px 0px 5px 0px\"}}>\n\t\t\t\t\tIf you don't have an account for biz.bookmanager, <a onClick={returnToV1}>click here to be taken to bookmanager.com.</a>\n\t\t\t\t</div>\n </Card>\n </>\n )\n\n \n\n}","/*\n\nDefault Layout - Wraps sections with nav, footer etc\n\n*/\n\nimport React from \"react\";\nimport { Affix, Layout, Menu, Space, Row, Col, Dropdown, Button, Divider, Breadcrumb, BackTop } from 'antd';\nimport { navigation } from \"../data\";\nimport { useHistory } from \"react-router-dom\";\nimport logosmall from \"../media/logo-small.png\";\nimport {\n SettingOutlined,\n EditOutlined,\n BarChartOutlined,\n DollarOutlined,\n ToolOutlined,\n CustomerServiceOutlined,\n MailOutlined,\n} from '@ant-design/icons';\nexport default function Standard(props) {\n\n const history = useHistory();\n const linkToPage = (_slug) => {\n\n // setSelected(_slug);\n history.push(\"/\" + _slug);\n }\n\n\n const getIcon = (_slug) => {\n switch (_slug) {\n case \"settings\":\n return (<SettingOutlined style={{ \"color\": \"#aaa\" }} />);\n case \"content\":\n return (<EditOutlined style={{ \"color\": \"#aaa\" }} />);\n case \"reports\":\n return (<BarChartOutlined style={{ \"color\": \"#aaa\" }} />);\n case \"purchasing\":\n return (<DollarOutlined style={{ \"color\": \"#aaa\" }} />);\n case \"tools\":\n return (<ToolOutlined style={{ \"color\": \"#aaa\" }} />);\n case \"support\":\n return (<CustomerServiceOutlined style={{ \"color\": \"#aaa\" }} />);\n }\n }\n\n\n\n\n // <Space>\n // <Dropdown overlay={menu} placement=\"bottomLeft\" arrow>\n // <Button type=\"text\">Settings</Button>\n // </Dropdown>\n // </Space>\n\n\n const drawBreadCrumbs = () => {\n\n return (\n\n <Breadcrumb>\n <Breadcrumb.Item href=\"\">\n <span> Settings</span>\n </Breadcrumb.Item>\n <Breadcrumb.Item>Webstore</Breadcrumb.Item>\n </Breadcrumb>\n )\n\n\n }\n\n const drawSubMenu = (_arr) => {\n return (\n <Menu>\n {_arr.map((item) => {\n return (\n <Menu.Item onClick={() => linkToPage(item.slug)} key={item.slug}>\n {item.name}\n </Menu.Item>\n )\n })}\n </Menu>\n )\n }\n\n const drawDropdownMenu = () => {\n return navigation.map((item) => {\n return (\n <Dropdown key={item.slug} overlay={() => drawSubMenu(item.subnav)} placement=\"bottomLeft\" arrow>\n <Button icon={getIcon(item.slug)} style={{ \"fontSize\": \"13px\" }} type=\"text\">{item.name}</Button>\n </Dropdown>\n )\n })\n }\n\n\n const drawMenu = () => {\n return navigation.map((item) => {\n return (\n <Menu.SubMenu key={item.slug} title={item.name}>\n {item.subnav.map((_item) => {\n return (<Menu.Item onClick={() => linkToPage(_item.slug)} key={_item.slug}>{_item.name}</Menu.Item>)\n })}\n </Menu.SubMenu>\n )\n })\n }\n\n\n return (\n <>\n <BackTop />\n <Layout>\n\n <Layout>\n <Affix>\n <div className=\"shadow\" style={{ \"backgroundColor\": \"#fff\" }}>\n <div className=\"flourish\" style={{ \"display\": \"block\", \"height\": \"5px\" }}></div>\n <Layout.Header style={{ \"maxWidth\": \"1250px\", \"margin\": \"0 auto\", \"backgroundColor\": \"#fff\", \"padding\": \"0px 15px\" }}>\n\n <Row>\n <Col flex=\"213px\">\n <Space>\n <img src={logosmall} />\n <div ><h4 style={{ \"marginBottom\": \"0px\", \"marginTop\": \"2px\" }}>  Bookmanager Admin</h4></div>\n <Divider style={{ \"marginLeft\": \"10px\" }} type=\"vertical\" />\n </Space>\n </Col>\n <Col flex=\"auto\">\n\n\n <Space>\n {drawDropdownMenu()}\n </Space>\n\n </Col>\n\n </Row>\n\n\n </Layout.Header>\n </div>\n </Affix>\n {/* <div style={{ \"backgroundColor\": \"#001529\" }}>\n <Menu style={{ \"maxWidth\": \"1250px\", \"margin\": \"0 auto\" }} theme=\"dark\" mode=\"horizontal\">\n {drawMenu()}\n </Menu>\n </div> */}\n\n <Layout.Content style={{ \"width\": \"100%\", \"minWidth\": \"762px\", \"maxWidth\": \"1250px\", \"margin\": \"0 auto\" }}>\n\n <div className=\"mobile15\">\n <div className=\"shim\"></div><div className=\"shim\"></div>\n {drawBreadCrumbs()}\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <div className=\"shadow\" style={{\"borderRadius\" : \"2px\"}}>\n {props.children}\n </div>\n \n </div>\n </Layout.Content>\n <div className=\"shadow\" style={{ \"backgroundColor\": \"#fff\" }}>\n <Layout.Footer style={{ \"backgroundColor\": \"#fff\", \"padding\": \"13px 50px\", \"maxWidth\": \"1250px\", \"margin\": \"0 auto\" }}>Footer</Layout.Footer>\n </div>\n </Layout>\n </Layout>\n </>\n );\n\n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE3NUMyMUI1OTYzNzExRUJBQkQzQzNENkNGRTQwNDVCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE3NUMyMUI2OTYzNzExRUJBQkQzQzNENkNGRTQwNDVCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTc1QzIxQjM5NjM3MTFFQkFCRDNDM0Q2Q0ZFNDA0NUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTc1QzIxQjQ5NjM3MTFFQkFCRDNDM0Q2Q0ZFNDA0NUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5OFHQoAAADlUlEQVR42sxXTUhUURQ+Y0NKSiMDOrNxCjT6QZpx1WJKxzbiIjOEaFPmxkVIC0E3RaLLhBZlLWZToYsQKrOFTFCp5CJc5Ij0Qw6UbkaFaQwrDaPud71num98z3lOEnPg8N7j3Xe/755z7nfPc5BNK+leCIhLo/Aa4SGLYaPCx4QPLXV5puzM67ABDNAu4QHanoFAtyAylBUBAbxfXO7qq60/mE/1h/Kp0uOkSq/TMH4mvk4zC+s08n6NRj6spUelRRD5ZJuAWjXAi10FDmo9tkc67u3Y8upvCr/+Lh33wpKKxFBGAgL8ogKXq7x/1kVlxbsoG5tP/qLmwWUZHWUgcc+SgFr5Y9yf8xfQzdN7aSfs8pOv9CC6yo9n9Eg40nL+BmHfSXATEkhHFddEnjZG5hxhtwO+vPKTxqNx6XYMc6rCLeYUpyLAoUeRvWh1W+b8c3yFnk7MCZ83ALuKdlND0Ecn/B55xbNVTZwMJ7gwZSqYAEIf6KgpJLgZaH8kRtOxhK3VVvu9dCpYJtxH+7xFhne9Y9+kQycEgSqHUjgQoI+dJXKrAbTv0TsJjPt/saPlbmo47qMrF/ypLXrg+hK/rnIqeZUiw/t84FmM+h6+3ZHiQ9TgPk8hna+rkBjAUmLVmKe0XSocG9j+eN5Mgz21Gx9Z5HQrwzdIAduASGFKUf9i1ThZaiGvOmtX4cYE8DAFDcVnlRaEuzrgFaTL5T2srj2yaadoWKHUna7tHbcn5UeYBJMxEV4RCMqinE3IlVaL6k8vOB7D4HoUdSxnpvx13IFPyskBwqvrveTeNH6rKOE7MzMl0NZ0mJJCaPRtJ3eGKEw4k8HKMQ6gAN/KrNKGbShVYfFaqaXwjEcXMgKkFyC0wF/hpluCMFQTz5EbdakxpT2LxgjgxOLc9Edm5RWq1tZ0RDomGVYhNiODqOgCxDb8ao6mVxKbegc9BWgYQmgmmMCAKp5WmlDFVybJYEvC+RyYjn2R4/Geq95KPfUiBBY3K07Vw4XQyeAUNC+sOUnGalfoVW+lnleb/al7YCkby1qKWWLxHqlBVMwMqQl3BmV6zKQ442GElY1Pxbd1GHGkIEp6akwPo2yO43QyXPVcK9s+jhWJl6gFFCJI2GlIoooEhzeTAVztgFEBXpveEbWgXcIAtE9297pdcMypwJMKiwwEVI8mX6B3s0Miy6bU8I+QW215TvyY5MSvWU78nP6v3/M/AgwAonVIuFlHvSkAAAAASUVORK5CYII=\"","import React, { useState } from \"react\";\nimport { Layout, Typography, Divider, Button, Space, Card, Tabs, DatePicker, Table, Dropdown, Statistic, Input, Form, Select, Radio, Checkbox, Popconfirm, Affix, Tag } from \"antd\";\n\nimport TitleDetails from \"../components/title/TitleDetails\"\nimport Comments from \"./Comments\";\nimport Pubstock from \"./Pubstock\";\nimport conditional from \"../utils/conditional\";\nimport ItemHistory2 from \"./ItemHistory2\";\nimport Title from \"./title/Title\";\nimport { FileSearchOutlined, CommentOutlined, BookOutlined } from '@ant-design/icons';\nimport PeerSales from \"./PeerSales\";\nimport Order from \"./Order\";\nimport { ucfirst } from \"../utils/Utils\";\nimport OrderBox from \"./OrderBox\";\n\nexport default function SidePanel(props) {\n\n const { isbn = \"9780995266520\", display = \"\" } = props;\n\n const [activeKey, setActiveKey] = useState(\"1\");\n\n\n const [visible, setVisible] = useState(\n {\n order: true,\n history: false,\n pubstock: false,\n comments: false,\n peers: false,\n }\n )\n\n if (!isbn) {\n return (<></>)\n }\n\n return (\n <>\n <Affix offsetTop={0}>\n <div style={{ \"padding\": \"10px\", backgroundColor: \"#fafafa\" }}>\n <div style={{ \"backgroundColor\": \"#fff\", \"border\": \"1px solid #eee\", \"borderRadius\": \"3px\" }}>\n\n <conditional.true value={(display === \"list\")}>\n <Title isbn={isbn} />\n </conditional.true>\n <conditional.true value={(display !== \"list\")}>\n <div className=\"shim\" />\n </conditional.true>\n {/* Bargain: 9780316204361 */}\n \n\n {/* <ItemHistory2 isbn={9780316204361} /> */}\n </div>\n {/* <div className=\"shim\" /><div className=\"shim\" /> */}\n {/* <Card bodyStyle={{ \"padding\": \"10px\" }}>\n <Space size={0}>\n\n {Object.keys(visible).map(key => {\n return (<Tag onClick={() => setVisible({ ...visible, [key]: !visible[key] })} color={(visible[key]) ? \"#1890ff\" : \"#bbb\"} style={{ \"cursor\": \"pointer\" }} ><small>{ucfirst(key)}</small></Tag>)\n })}\n\n </Space>\n </Card> */}\n </div>\n </Affix>\n\n\n {/* <div className=\"minscroll\" style={{ \"scrollbarWidth\": \"0px\" }}>\n <div className=\"detailview\" style={{ \"padding\": \"10px\", backgroundColor: \"#fafafa\" }}>\n\n <conditional.true value={(visible.order)}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <OrderBox />\n </Card><div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n <conditional.true value={(visible.history)}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}><ItemHistory2 isbn={isbn} /></Card><div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n <conditional.true value={(visible.pubstock)}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}><Pubstock isbn={isbn} /></Card><div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n\n\n <conditional.true value={(visible.comments)}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}><Comments isbn={isbn} /></Card><div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n\n\n <conditional.true value={(visible.details)}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}><TitleDetails display=\"details\" isbn={isbn} /></Card>\n </conditional.true>\n\n\n\n\n\n\n\n <conditional.true value={(visible.peers)}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}><PeerSales isbn={isbn} /></Card><div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n\n </div>\n <div className=\"shim\" />\n\n </div> */}\n\n\n </>\n );\n\n\n}","import React, { useState, useEffect } from \"react\";\n\nimport { Form, Layout, Row, Col, Space, Typography, Divider, Input, Button, Radio, Select, Table, Collapse, Affix, Pagination } from \"antd\";\nimport Pubstock from \"../components/Pubstock\";\nimport Comments from \"../components/Comments\";\nimport conditional from \"../utils/conditional\";\nimport { apiCall } from \"../utils/Api\";\n\nimport Title from \"../components/title/Title\";\nimport ItemHistory2 from \"../components/ItemHistory2\";\n\n\nimport { FilterFilled, FilterOutlined, MenuOutlined, PicLeftOutlined, AppstoreOutlined } from '@ant-design/icons';\nimport SidePanel from \"../components/SidePanel\";\nimport { parseSubjects, addKeys } from \"../utils/Utils\";\nimport moment from \"moment\";\nexport default function Test() {\n\n\n const [loading, setLoading] = useState(false);\n const [results, setResults] = useState({ filter_info: {}, rows: [], row_count: 0 });\n const [selected, setSelected] = useState(\"\");\n const [pageSize, setPageSize] = useState(20);\n const [current, setCurrent] = useState(1)\n\n const [width, setWidth] = useState(0);\n\n\n\n\n\n\n const toggleSelected = (_isbn) => {\n if (selected === _isbn) {\n setSelected(\"\")\n } else {\n setSelected(_isbn)\n }\n }\n\n const [isFiltering, setIsFiltering] = useState(true);\n const [filters, setFilters] = useState({\n term: \"\",\n display: \"list\",\n sort: \"date\",\n });\n\n\n const [searchFilters, setSearchFilters] = useState(\n {\n b: [], // browse\n s: [], // subjects\n n: [], // non-books\n d: [], // date \n f: [], // format \n a: [], // age\n o: 0, // offset\n l: 20, // limit\n t: \"\", // term\n k: \"\", // type\n }\n )\n\n\n const getPeerFromSales = (_sales) => {\n let m = _sales.find((item => item.code === \"\"));\n if (m) {\n m = m.sales.rows.find(item => item.class === \"peer\");\n if (m) {\n return <>{m.onhand} - {m.total_stores}</>;\n } else {\n return \"\";\n }\n }\n return \"\";\n }\n\n const getBrowse = () => {\n setLoading(true);\n apiCall(\"browse/get\", searchFilters, (_status, _result) => {\n setLoading(false);\n addKeys(_result.rows, \"isbn\");\n setResults(_result);\n })\n }\n\n useEffect(getBrowse, [searchFilters]);\n\n const pageChange = (_page, _limit) => {\n\n setPageSize(_limit);\n setCurrent(_page);\n let _offset = (_page - 1) * _limit;\n if (_offset !== searchFilters.o) {\n setSearchFilters({ ...searchFilters, \"o\": _offset, \"l\": _limit });\n console.log(\"Search\");\n }\n }\n\n\n const columns = [\n {\n title: <small>Release Date</small>, width: \"100px\", dataIndex: 'release_date', key: 'release_date', render: (e) => {\n return moment(e * 1000).format(\"MMM Do, YYYY\");\n }\n },\n {\n title: <small>Rank</small>, dataIndex: 'rank', key: 'rank', render: (e) => {\n return (e.hasOwnProperty(\"bestseller\") ? e.bestseller : e.future);\n }\n },\n // { title: <small>Cart</small>, dataIndex: 'cart', key: 'cart', render : () =>{\n // return <Button size=\"small\"><small>Order</small></Button>;\n\n // }},\n {\n title: <small>OH</small>, dataIndex: 'onhand', key: 'onhand', render: (e, f) => {\n return getPeerFromSales(f.sales)\n }\n },\n { title: <small>OO</small>, dataIndex: 'onorder', key: 'onorder' },\n { title: <small>Price</small>, dataIndex: 'price', key: 'price' },\n { title: <small>Binding</small>, dataIndex: 'binding', key: 'binding' },\n { title: <small>Title</small>, className: \"nowrap\", dataIndex: 'title', key: 'title' },\n {\n title: <small>Author</small>, className: \"nowrap\", dataIndex: 'authors', key: 'authors', render: (e) => {\n return e.join(\", \")\n }\n },\n { title: <small>Series</small>, className: \"nowrap\", dataIndex: 'series', key: 'series' },\n { title: <small>#</small>, dataIndex: 'series_num', key: 'series_num' },\n {\n title: <small>Subjects</small>, className: \"nowrap\", dataIndex: 'subjects', key: 'subjects', render: (e) => {\n return parseSubjects(e);\n }\n },\n { title: <small>Publisher</small>, className: \"nowrap\", dataIndex: 'publisher', key: 'publisher' },\n // { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn' },\n\n\n ]\n\n\n\n\n const drawFilters = () => {\n\n\n return (<>\n <conditional.true value={(!isFiltering)}>\n <Divider />\n </conditional.true>\n <conditional.true value={(isFiltering)}>\n <div style={{ \"paddingBottom\": \"0px\", \"backgroundColor\": \"#fafafa\", \"margin\": \"24px -30px\", \"padding\": \"20px 28px 0px 28px\", \"border\": \"1px solid #eee\", \"borderLeft\": \"0px\", \"borderRight\": \"0px\" }}>\n <Form layout=\"vertical\">\n <Space wrap size={[20, 0]}>\n\n <Form.Item initialValue={\"date_posted\"} label=\"Sort\" name=\"show_filter\">\n <Select style={{ width: 130 }}>\n <Select.Option value=\"date_posted\">Date posted</Select.Option>\n <Select.Option value=\"alphabetical\">Alphabetical</Select.Option>\n <Select.Option value=\"last_updated\" >Last updated</Select.Option>\n </Select>\n </Form.Item>\n\n <Form.Item initialValue={filters.display} label=\"Display\" name=\"show_details\">\n <Radio.Group onChange={(e) => setFilters({ ...filters, \"display\": e.target.value })} buttonStyle=\"solid\">\n <Radio.Button value={\"list\"}><MenuOutlined /></Radio.Button>\n <Radio.Button value={\"cards\"}><AppstoreOutlined /></Radio.Button>\n <Radio.Button value={\"details\"}><PicLeftOutlined /></Radio.Button>\n </Radio.Group>\n </Form.Item>\n\n <Form.Item label=\"Find a list\" name=\"customer_search\">\n <Input.Search allowClear enterButton=\"Search\" placeholder=\"Enter ISBN or keyworkd within a list's name\" style={{ \"width\": \"400px\" }} />\n </Form.Item>\n\n </Space>\n </Form>\n </div>\n </conditional.true>\n </>\n )\n\n }\n\n\n const drawChildTable = (_record) => {\n return (\n <div>\n <Row gutter={[20, 20]}>\n <Col span={10}> <Title data={_record} /></Col>\n\n <Col span={14}>\n\n {/* {_record.sales.map((item, key) => {\n return <ItemHistory2 key={key} data={item.sales} />\n })} */}\n\n\n </Col>\n </Row>\n <Divider dashed />\n </div>\n );\n }\n\n\n\n return (\n <>\n\n <Layout style={{ \"backgroundColor\": \"#fff\", \"overflow\": \"hidden\" }}>\n\n <Layout.Content style={{ \"borderLeft\": \"1px solid #eee\", \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={4}>\n <span style={{ \"fontSize\": \"10px\", \"color\": \"#ccc\", \"letterSpacing\": \"2px\" }}>PURCHASING</span><br />\n <div style={{ \"marginTop\": \"-5px\" }}> Browse <Button onClick={() => setIsFiltering(!isFiltering)} type=\"link\">{(isFiltering) ? <FilterFilled /> : <FilterOutlined />}</Button> </div>\n </Typography.Title>\n\n\n {drawFilters()}\n\n \n\n\n\n <conditional.true value={(filters.display === \"details\")}>\n\n <div>\n {results.rows.map((item, index) => {\n return <Title key={item.isbn} loading={loading} selected={selected} setSelected={toggleSelected} data={item} isbn={item.isbn} />\n })}\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}><Pagination size=\"small\" current={current} pageSize={pageSize} total={results.row_count} onChange={(_page, _limit) => pageChange(_page, _limit)} /></div>\n <br clear=\"all\" />\n\n </conditional.true>\n\n\n\n <conditional.true value={(filters.display === \"cards\")}>\n\n <div className=\"cardgrid\">\n {results.rows.map((item, index) => {\n return <Title key={item.isbn} loading={loading} selected={selected} setSelected={toggleSelected} data={item} display=\"card\" isbn={item.isbn} />\n })}\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}><Pagination size=\"small\" current={current} pageSize={pageSize} total={results.row_count} onChange={(_page, _limit) => pageChange(_page, _limit)} /></div>\n <br clear=\"all\" />\n\n </conditional.true>\n\n <conditional.true value={(filters.display === \"list\")}>\n <Table size=\"small\" pagination={{ pageSize: pageSize, total: results.row_count, current: current, onChange: (_page, _limit) => pageChange(_page, _limit), position: [\"bottomRight\"] }}\n loading={loading}\n columns={columns}\n className=\"hide_hover\"\n rowSelection={{\n selectedRowKeys: [selected],\n onChange: console.log(\"called\"),\n type: 'radio',\n hideSelectAll: true,\n }}\n\n // scroll={{ x: 1100 }}\n onRow={(record, rowIndex) => { return { onClick: event => { toggleSelected(record.isbn) } }; }}\n selectedRowKeys={[selected]}\n tableLayout={(filters.display === \"list\") ? \"auto\" : \"fixed\"}\n rowClassName={(!filters.display === \"list\") ? \"rowHide\" : \"rowShow\"}\n showHeader={(filters.display === \"list\")}\n dataSource={results.rows}\n expandable\n expandedRowKeys={(!filters.display === \"list\") ? results.rows.map(item => { return item.key }) : []}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </conditional.true>\n\n\n </div>\n </Layout.Content>\n\n\n\n\n <Layout.Sider breakpoint=\"xl\" onBreakpoint={(e) => setWidth((e) ? 0 : 600)} style={{ \"backgroundColor\": \"#fafafa\", \"borderLeft\": \"1px solid #eee\" }} width={width}>\n <Affix offsetTop={1}>\n <div className=\"minscroll\" style={{ \"width\": width, \"overflow\": \"scroll\", height: \"100vh\" }}>\n {/* <Comments isbn={9780995266520} /> */}\n\n\n <SidePanel display={filters.display} isbn={selected} />\n\n </div>\n </Affix>\n\n\n </Layout.Sider>\n </Layout>\n </>\n )\n}","import React from \"react\";\nimport { Space, Card, Layout, Typography, Divider, Input, Button, Table } from \"antd\";\nimport { PlusOutlined } from '@ant-design/icons';\nexport default function URLShortcuts() {\n\n return (\n <>\n <Layout style={{ \"backgroundColor\": \"#fff\" }}>\n <Layout.Content style={{ \"borderLeft\": \"1px solid #eee\", \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={4}>URL Shortcuts</Typography.Title>\n <Divider />\n <Typography.Paragraph type=\"secondary\">Create and share more consumer friendly URLs for pages and links on your site. Type your desired shortcut in the <strong>Keyword</strong> field, paste the URL you want that shortcut to link to in the <strong>Original URL field</strong>, then click <strong>Create</strong>. The <strong>New URL</strong> field will have a user friendly link that you can share. Click the new URL and copy it, or simply click the <strong>Share</strong> button to copy the link to your clipboard.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\"><strong>Note:</strong> Keywords should not contain spaces or symbols <strong>( @ # $ % ^ & * )</strong></Typography.Paragraph>\n <Card style={{ \"maxWidth\": \"500px\" }} >\n <Typography.Title level={5}>Your Domain: staging.bookmanager.com/test000/</Typography.Title>\n <br />\n <Space size=\"large\">\n <Input placeholder=\"Keyword\"></Input>\n <PlusOutlined />\n <Input placeholder=\"Original URL\"></Input>\n <Button type=\"primary\">Create</Button>\n </Space>\n </Card>\n <Divider />\n <Table size=\"small\" pagination={false}\n columns={[\n { title: 'Share', dataIndex: 'copy', key: 'copy', width: 80 },\n { title: 'Keyword', dataIndex: 'keyword', key: 'keyword', width: 140, ellipsis: true },\n { title: 'Original URL', dataIndex: 'original_url', key: 'original_url', ellipsis: true },\n { title: 'New URL', dataIndex: 'new_url', key: 'new_url', ellipsis: true },\n { dataIndex: 'delete', key: 'delete', width: 80 },\n ]}\n dataSource={[\n { key: '1', delete: <Button type=\"primary\" danger size=\"small\"><small>Delete</small></Button>, keyword: 'urlshortcutpath', original_url: \"https://staging.bookmanager.com/test000/?q=h.siteedit.urlshortcuts\", new_url: \"https://staging.bookmanager.com/test000/urlshortcutpath\", copy: <Button type=\"primary\" size=\"small\"><small>Copy</small></Button> },\n { key: '1', delete: <Button type=\"primary\" danger size=\"small\"><small>Delete</small></Button>, keyword: 'urlshortcutpath', original_url: \"https://staging.bookmanager.com/test000/?q=h.siteedit.urlshortcuts\", new_url: \"https://staging.bookmanager.com/test000/urlshortcutpath\", copy: <Button type=\"primary\" size=\"small\"><small>Copy</small></Button> }\n ]}\n >\n </Table>\n <Divider />\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import { message, Spin, Table } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { apiCall } from \"../../utils/Api\";\nimport { addCommas } from \"../../utils/Utils\";\n\nexport default function AnalyticsTableHtml(){\n\n const loc = useLocation(); \n const [loading, setLoading] = useState(true)\n const [data, setData] = useState({ rows: [], row_count: 0, temp_list_id: \"\" });\n\n\n const URLToObject = (_url) => {\n const object = {};\n const pairs = _url.split('&');\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i].split('=');\n object[pair[0]] = decodeURIComponent(pair[1]);\n }\n return object;\n }\n\n\n const params = URLToObject(loc.search.replace(\"?\", \"\"));\n\n\n const fetchTable = () => {\n setLoading(true)\n let obj = URLToObject(loc.search.replace(\"?\", \"\"));\n if(obj.isbns === \"false\"){\n obj.limit = 1000;\n } else {\n obj.limit = 10000;\n }\n \n delete obj.offset; \n apiCall(\"reports/analytics/getTitles\", obj, (_status, _result) => {\n if(_status){\n setData(_result)\n } else {\n message.error(_result.data);\n }\n setLoading(false)\n })\n }\n useEffect(fetchTable, [])\n\n const columns = [\n { title: <small>Sold</small>, dataIndex: 'sold', key: 'sold' },\n { title: <small>aOH</small>, dataIndex: 'cur_oh', key: 'cur_oh' },\n { title: <small>aOO</small>, dataIndex: 'cur_oo', key: 'cur_oo' },\n { title: <small>Price</small>, dataIndex: 'price', key: 'price' },\n { title: <small>Title</small>, dataIndex: 'title', key: 'title' },\n { title: <small>Author</small>, dataIndex: 'author', key: 'author' },\n { title: <small>Cat</small>, dataIndex: 'cat', key: 'cat' },\n { title: <small>Cat2</small>, dataIndex: 'cat2', key: 'cat2' }, \n { title: <small>Supl</small>, dataIndex: 'scode', key: 'scode' },\n { title: <small>TtlRcv</small>, dataIndex: 'ttlrcvd', key: 'ttlrcvd' },\n { title: <small>Rtn</small>, dataIndex: 'rtrn', key: 'rtrn' },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn' },\n ]\n\n\n \n\n if(loading){\n return(\n <Spin spinning={loading}>\n <div style={{\"height\" : \"100vh\"}}> </div>\n </Spin>\n )\n }\n\n\n \n if(params.isbns === \"true\"){\n return(\n <>\n ISBN results: {(data.row_count < 10000) ? addCommas(data.row_count) : addCommas(10000)}<br />\n ----<br />\n {data.rows.map(item => {\n return(<>{item.isbn}<br /></>)\n })}\n </>\n )\n }\n\n return(\n <>\n <Table\n size=\"small\"\n pagination={false}\n columns={columns}\n dataSource={data.rows}\n />\n </>\n )\n}","import { Input } from \"antd\";\nimport React, { useState } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport { filterUnique, sortAlpha } from \"../utils/Utils\";\n\nexport default function FilterAutocomplete(props) {\n\n const { searchFilters = {}, filters = [], setFilters, name = \"\" } = props;\n const [initFilters, setInitFilters] = useState([]);\n\n\n const local = (name === \"publisher_imprint\") ? false : true;\n\n \n\n\n const searchLocal = (_search, ifilters) => {\n\n if(!_search){\n setFilters(ifilters);\n return; \n }\n \n let index = ifilters.findIndex(item => item.name === name);\n\n if (index > -1) {\n let _f = ifilters.map(item => {\n return {...item}\n });\n\n \n _f[index].rows = sortAlpha(filterUnique(_f[index].rows.filter(item => item.name.toUpperCase().includes(_search.toUpperCase()) && item.key !== \"--\"), \"name\"), \"name\")\n \n console.log(_f[index].rows);\n setFilters(_f); \n }\n\n\n }\n\n \n const onChange = (_search) => {\n\n // ensure init is set\n let ifilters = initFilters;\n if (filters.length > initFilters.length) {\n ifilters = filters.map(item => {\n return {...item}\n });\n setInitFilters(ifilters);\n }\n\n\n if (!_search) {\n setFilters(ifilters);\n }\n\n if (local) {\n return searchLocal(_search, ifilters);\n }\n\n\n apiCall(\"browse/getAutocompleteFacets\", { filter_name: \"publisher_imprint\", search_term: _search, search_filters : JSON.stringify(searchFilters)}, (_status, _result) => {\n if (_status) {\n let index = ifilters.findIndex(item => item.name === name);\n if (index > -1) {\n let _f = [...ifilters]\n _f[index].rows = _result.rows;\n setFilters(_f);\n }\n\n }\n })\n }\n\n\n return (\n <>\n <div className=\"shim\" />\n <Input onChange={(e) => onChange(e.target.value)} allowClear onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n // onChange(e.target.value);\n }\n }} style={{ \"fontSize\": \"12px\" }} size=\"small\" placeholder=\"Refine...\" />\n\n \n </>\n )\n}","import { Button, Space, message } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { objectToPath, pathToObject } from \"../utils/Utils\";\nimport { apiCall } from \"../utils/Api\";\n\nexport default function FilterPresetLabel(props) {\n\n const { setToolboxes = () => {}, searchFilters = {}, toolboxes = { store_specific: [], bookmanager: [] } } = props;\n const location = useLocation();\n const obj = pathToObject(location.pathname);\n const preset_id = (obj.hasOwnProperty(\"p\")) ? obj.p : \"\";\n\n const [init, setInit] = useState(false);\n const [showSave, setShowSave] = useState(true);\n const [loading, setLoading] = useState(false)\n \n const updatePreset = (_preset) => {\n setLoading(true)\n\n let _sf = { ...searchFilters };\n\n delete _sf.l;\n delete _sf.o;\n if(_sf.hasOwnProperty(\"p\")){\n delete _sf.p; \n }\n\n let obj = {\n id: preset_id,\n name: _preset.name,\n header: _preset.header,\n version: \"v3\",\n selections_json: JSON.stringify(_sf)\n }\n\n\n apiCall(\"toolbox/set\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Preset `\" + _preset.name + \"` Updated!\");\n setToolboxes(_result);\n setShowSave(false);\n } else {\n message.error(_result.error);\n }\n setLoading(false)\n })\n }\n\n\n const preset_label = toolboxes.store_specific.find(item => item.id == preset_id) || toolboxes.bookmanager.find(item => item.id == preset_id);\n\n\n if (!preset_id) {\n return (<></>);\n }\n \n if (!preset_label) {\n return (<></>);\n }\n\n const { name = \"\", selections = {} } = preset_label;\n const path = objectToPath(selections);\n\n\n return (\n <Space>\n <div style={{ \"padding\": \"0px\", \"paddingRight\": \"5px\", \"color\": \"#007ef5\" }} type=\"link\"><em>Preset \"{name}\"</em> →</div>\n {/* <div style={{ \"padding\": \"0px\", \"paddingRight\": \"5px\", \"color\": \"#007ef5\" }} type=\"link\"><em>Preset \"{name}\"</em> {(showSave && <Button loading={loading} className=\"tiny-btn\" onClick={() => updatePreset(preset_label)} style={{ \"margin\": \"0px 3px\" }} size=\"small\" type=\"primary\"><small>Update Preset</small></Button>)} →</div> */}\n </Space>\n )\n}","import { CloseOutlined, DeleteOutlined, SlidersOutlined, StarFilled, StarOutlined } from '@ant-design/icons';\nimport { Button, Col, Divider, Drawer, Input, message, Modal, Popconfirm, Row, Space, Table, Tooltip, Typography } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { apiCall } from \"../utils/Api\";\nimport { useSession } from \"../utils/Session\";\nimport { bmDate, objectToPath, pathToObject, successColor } from \"../utils/Utils\";\n\n// Toolbox/Result values: {\n// \"selections\": [],\n// \"header\": \"status\",\n// \"version\": \"v3\",\n// \"id\": 3,\n// \"name\": \"test\",\n// \"is_shared\": false,\n// \"is_yours\": true,\n// \"last_used\": 1649284134,\n// \"creator\": \"Michael Hunter\"\n// }\n\nexport default function FilterPresets(props) {\n\n const { header = \"status\", searchFilters = {}, showselected=false, setSearchFilters= () => {}, getBrowse=() => {}, path = \"\", toolboxes = { store_specific: [], bookmanager: [] } } = props;\n const [session, setSession] = useSession();\n const [visible, setVisible] = useState(false);\n const [name, setName] = useState(\"\")\n const [results, setResults] = useState(toolboxes);\n const history = useHistory();\n\n const routePath = (_arr) => {\n\n apiCall(\"toolbox/pingUsed\", {id : _arr.id}, () => {});\n \n if(_arr.selections.hasOwnProperty(\"p\")){\n delete _arr.selections.p; \n }\n \n let filters = objectToPath(_arr.selections);\n setSearchFilters(_arr.selections);\n getBrowse(false, _arr.selections);\n\n history.push(path + filters + \"/p/\" + _arr.id);\n setVisible(false);\n }\n\n\n const sharePreset = (_id, _shared = true) => {\n apiCall(\"toolbox/setShared\", { id: _id, header: header, shared: _shared }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n message.success((_shared) ? \"Preset shared\" : \"Preset un-shared\");\n } else {\n message.error(\"There was a problem sharing the preset.\")\n }\n })\n }\n\n \n const deletePreset = (_id) => {\n apiCall(\"toolbox/delete\", { id: _id, header: header }, (_status, _result) => {\n if (_status) {\n message.success(\"Preset deleted.\");\n setResults(_result);\n } else {\n if(_result.code === 1){\n Modal.error({\n title : \"Preset currently in use:\",\n content : <>\n {((_result.data.hasOwnProperty(\"shipping\")) && <>• Source for shipping provider</>)}\n {((_result.data.hasOwnProperty(\"titlelist_def\")) && <>• Source for list: ({_result.data.titlelist_def.join(\", \")})</>)}\n <div><small>You cannot delete the preset until you unlink</small></div>\n </>\n })\n } else {\n message.error(\"There was a problem deleting the preset.\")\n }\n }\n })\n }\n\n const saveCurrent = (_name) => {\n let _sf = {...searchFilters};\n delete _sf.l;\n delete _sf.o;\n let obj = {\n name: _name,\n header: header,\n version: \"v3\",\n selections_json: JSON.stringify(_sf)\n }\n\n apiCall(\"toolbox/create\", obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setName(\"\");\n } else {\n message.error(_result.error);\n }\n })\n }\n\n const drawDefault = (_obj) => {\n if (_obj.id === session.filter_preset_defaults[header].id) {\n return <StarFilled style={{ \"color\": \"#eabf4b\", \"cursor\": \"pointer\" }} />\n } else {\n return <Tooltip title={<small>Set as default.</small>}><StarOutlined style={{ \"color\": \"#AAA\", \"cursor\": \"pointer\" }} /></Tooltip>\n }\n }\n\n const setDefault = (_id) => {\n apiCall(\"toolbox/setDefault\", { header: header, id: _id }, (_status, _result) => {\n setSession({ ...session, \"filter_preset_defaults\": _result });\n })\n }\n\n const columns = [\n {\n title: <small>Name</small>, bm: false, className: \"nowrap150\", dataIndex: 'name', key: 'name', render: (e, f) => {\n return (\n <>\n <div><a onClick={() => routePath(f)}>{e}</a></div>\n </>\n )\n }\n },\n {\n title: <small>Creator</small>, bm: true, className: \"nowrap80\", dataIndex: 'creator', key: 'creator', render: (e) => {\n return (e) ? <span style={{ \"fontSize\": \"11px\" }}>{e}</span> : \"\"\n }\n },\n {\n title: <small>Last used</small>, bm: true, width: \"65px\", dataIndex: 'last_used', key: 'last_used', render: (e) => {\n return (e) ? <span style={{ \"fontSize\": \"11px\" }}>{bmDate(e * 1000)}</span> : \"\"\n }\n },\n {\n title: <small></small>, bm: false, width: \"0px\", dataIndex: 'actions', key: 'actions', render: (e, f) => {\n\n if (f.creator === \"Bookmanager\") {\n return <div style={{ \"paddingRight\": \"8px\" }} onClick={() => setDefault(f.id)}>{drawDefault(f)}</div>;\n }\n return <>\n <Space size={4}>\n <div style={{ \"paddingRight\": \"8px\" }} onClick={() => setDefault(f.id)}>{drawDefault(f)}</div>\n {/* <Popconfirm disabled={(!f.is_yours)} onConfirm={() => sharePreset(f.id, (!f.is_shared))} title=\"Share?\"><Button disabled={(!f.is_yours)} style={{ \"opacity\": (!f.is_yours) ? \"0\" : \"1\", \"padding\": \"0px 6px\" }} type=\"primary\" size=\"small\" className=\"tiny-btn\"><small>{(f.is_shared) ? \"Un-share\" : \"Share\"}</small></Button></Popconfirm> */}\n <Popconfirm disabled={(!f.is_yours)} onConfirm={() => deletePreset(f.id)} title=\"Delete?\"><Button disabled={(!f.is_yours)} danger type=\"primary\" size=\"small\" className=\"tiny-btn\"><DeleteOutlined /></Button></Popconfirm>\n </Space>\n </>\n }\n },\n ];\n\n\n const drawTable = (_label, _data, _show_create, _show_tools = true) => {\n return (\n <>\n <Typography.Title level={5}>\n\n {(_show_create && <> <>\n <div style={{ \"width\": \"250px\", \"float\": \"right\" }}><Input.Search maxLength={50} onSearch={(e) => saveCurrent(e)} value={name} onChange={(e) => setName(e.target.value)} enterButton={<small>Save</small>} placeholder=\"Create new preset...\" size=\"small\" /></div>\n </>\n </>)}\n <small>{_label}</small>\n </Typography.Title>\n <Table pagination={false} className=\"presetTable\" columns={(_label === \"Bookmanager\") ? columns.filter(item => !item.bm) : columns} dataSource={_data} />\n </>\n )\n }\n\n const drawPresets = () => {\n return (\n <div style={{ \"marginTop\": \"85px\" }}>\n <Typography.Title level={5}>Filter presets</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\", \"marginBottom\" : \"25px\" }} dashed />\n <Row gutter={25}>\n <Col span={12}>\n {drawTable((session.contact.first_name) ? session.contact.first_name + \"'s presets\" : \"My presets\", results.store_specific.filter(item => item.is_yours), true)}\n <Divider style={{\"marginBottom\" : \"10px\"}} dashed />\n {drawTable(\"Bookmanager\", results.bookmanager, false, false)}\n </Col>\n <Col span={12}>\n {drawTable(\"Shared with staff at \" + session.store_name, results.store_specific.filter(item => !item.is_yours))}\n </Col>\n </Row>\n </div>\n )\n }\n\n return (<><Drawer closable={true} closeIcon={<div style={{ \"marginTop\": \"85px\" }}><CloseOutlined /></div>} width={1240} placement=\"left\" onClose={() => setVisible(false)} visible={visible}>{drawPresets()}</Drawer><Button onClick={(e) => setVisible(true)} icon={<small><SlidersOutlined style={{ \"marginRight\": \"4px\", \"marginLeft\": \"-3px\" }} /></small>} className=\"filterpreset\" style={{ \"padding\": \"0px 10px\", \"lineHeight\": \"10px\", \"height\": \"23px\", \"border\": \"none\" }} type=\"primary\"><span style={{ \"fontSize\": \"12px\" }}>Filter presets</span></Button></>)\n}","import { CheckSquareFilled, CloseOutlined, CloseSquareFilled, StarFilled } from '@ant-design/icons';\nimport { Divider, Space, Tooltip } from \"antd\";\nimport React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { bestsellerColor, objectToPath, successColor } from \"../utils/Utils\";\n\nexport default function MagicFilters(props) {\n const history = useHistory();\n const { path = \"\", filter, getBrowse = () => { }, searchFilters = [], setSearchFilters = () => { } } = props;\n const { magic_filters } = filter;\n\n\n const deselectFilter = (_key, _filters, _ex = false) => {\n let _char = filter.routing_char;\n if (_ex) {\n _filters = _filters.map(item => {\n return \"-\" + item;\n })\n }\n if (searchFilters.hasOwnProperty(_char)) {\n let ret = [];\n searchFilters[_char].forEach(element => {\n if (!_filters.includes(element)) {\n ret.push(element);\n }\n });\n let _update = { ...searchFilters, [_char]: ret };\n setSearchFilters(_update);\n getBrowse(false, _update);\n history.push({ pathname: path + objectToPath(_update) })\n }\n }\n\n const selectFilter = (_key, _filters, _ex = false) => {\n let _char = filter.routing_char;\n let _current = [];\n if (searchFilters.hasOwnProperty(_char)) {\n _current = [...searchFilters[_char]];\n console.log(searchFilters[_char])\n }\n // remove any existing inc or exc\n _current = _current.filter(item => !_filters.includes(item))\n _current = _current.filter(item => !_filters.includes(\"-\" + item))\n if (_ex) {\n _filters = _filters.map(item => {\n return \"-\" + item;\n })\n }\n _current = _current.concat(_filters);\n // console.log(_current)\n let _update = { ...searchFilters, [_char]: _current }\n setSearchFilters(_update)\n getBrowse(false, _update);\n history.push({ pathname: path + objectToPath(_update) })\n\n }\n\n const drawFilter = (_item) => {\n const { filters = [], key = \"\", name = \"\", tooltip = \"\", exclude = false } = _item;\n let count = 12;\n let index = 1;\n let _char = filter.routing_char;\n let _set = true;\n if (searchFilters.hasOwnProperty(_char)) {\n filters.forEach(element => {\n if (!exclude) {\n if (!searchFilters[_char].includes(element)) {\n _set = false;\n }\n }\n if (exclude) {\n if (!searchFilters[_char].includes(\"-\" + element)) {\n _set = false;\n }\n }\n });\n } else {\n _set = false;\n }\n return (\n <>\n <div key={index}>\n <Tooltip mouseEnterDelay={0.5} title={<small>{tooltip}<span style={{ \"color\": \"#999\", \"fontSize\": \"9px\" }}></span></small>}>\n <div onClick={() => {\n if (_set) {\n deselectFilter(key, filters, exclude);\n } else {\n selectFilter(key, filters, exclude)\n }\n }\n } style={{ \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"maxWidth\": \"130px\", \"whiteSpace\": \"nowrap\", \"cursor\": \"pointer\" }}>\n <small><div style={{ \"color\": \"#999\", \"fontSize\": \"8px\", \"width\": \"25px\", \"display\": \"inline-block\" }}>  <StarFilled /></div> <span className=\"c\">{(_set) ? <strong>{name}</strong> : name}</span> </small>\n </div>\n </Tooltip>\n </div >\n </>\n )\n }\n\n if (!magic_filters.length) {\n return (<></>)\n }\n\n const checkForMultistore = () => {\n if(!filter.rows[0]){\n return false;\n }\n\n if(filter.rows[0].key === \"--\"){\n return true;\n }\n return false;\n }\n\n return (\n <div style={{ \"marginLeft\": \"5px\", \"marginTop\": \"-5px\" }}>\n {magic_filters.map(item => {\n return drawFilter(item);\n })}\n <div className=\"shim\" />\n <div key={\"label\"} style={{ \"marginRight\": \"15px\" }}>\n {(!checkForMultistore() && <Divider style={{ \"margin\": \"0px\", \"pointerEvents\": \"none\", \"marginTop\": \"0px\" }} plain />)}\n </div>\n <div className=\"shim\" />\n </div>\n )\n}","import { Divider, Space, Tooltip } from \"antd\";\nimport React, { useState } from \"react\";\nimport { CloseOutlined, CheckSquareFilled, CloseSquareFilled } from '@ant-design/icons';\nimport { successColor, bestsellerColor, objectToPath, pathToObject, ucfirst } from \"../utils/Utils\";\nexport default function Metafilters(props) {\n\n const { metaSet = [], setMetaSet = () => { }, filter = {} } = props;\n const { meta_filters = [] } = filter;\n\n if (meta_filters.length < 1) {\n return <></>;\n }\n\n const toggle = (_filter, _overwrite = false, _negate = false) => {\n\n let _arr = [...metaSet];\n let _found = _arr.findIndex(item => item.key === _filter.key);\n\n if(_found > -1){\n // Exists\n // set negate if not already set\n if(!_arr[_found].hasOwnProperty(\"negate\")){\n _arr[_found].negate = false; \n }\n\n if(_arr[_found].negate === _negate){\n // not swapping negate, remove\n _arr.splice(_found, 1);\n } else {\n // swapping, just update\n _arr[_found].negate = _negate; \n }\n\n } else {\n\n if(_overwrite){\n // Overwrite\n _arr = [_filter];\n } else {\n // Add \n _arr.push(_filter);\n }\n }\n\n _filter.negate = _negate;\n\n setMetaSet(_arr);\n }\n\n const drawFilter = (_filter) => {\n\n let { name = \"\", key = \"\", tooltip = \"\" } = _filter;\n\n if(!_filter.hasOwnProperty(\"negate\")){\n _filter.negate = false; \n }\n\n let selected = (metaSet.find(item => item.key === key));\n\n return (\n <div key={key}>\n {/* <Tooltip mouseEnterDelay={0.5} title={<small>{tooltip}<span style={{ \"color\": \"#999\", \"fontSize\": \"9px\" }}></span></small>}> */}\n <div style={{ \"float\": \"right\", \"marginRight\": \"12px\" }}>\n <Space size={2}>\n <div><CloseSquareFilled onClick={() => toggle(_filter, false, true)} key={\"exclude\"} style={{ \"color\": (selected && _filter.negate) ? bestsellerColor : \"#bbb\" }} /></div>\n <div><CheckSquareFilled onClick={() => toggle(_filter, false)} key={\"include\"} style={{ \"color\": (selected && !_filter.negate) ? successColor : \"#bbb\"}} /></div>\n </Space>\n </div>\n {/* <Tooltip mouseEnterDelay={0.5} title={<small>{name} <span style={{ \"color\": \"#999\", \"fontSize\": \"9px\" }}>{formatCount(count)}</span></small>}> */}\n <div onClick={() => toggle(_filter, true)} className=\"c\" style={{ \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"maxWidth\": \"150px\", \"whiteSpace\": \"nowrap\", \"cursor\": \"pointer\" }}>\n <small><div style={{ \"color\": \"#999\", \"fontSize\": \"9px\", \"width\": \"25px\", \"display\": \"inline-block\" }}>({_filter.filters.length})</div> <span className=\"c\">{(selected) ? <strong>{name}</strong> : name}</span> </small>\n </div>\n {/* </Tooltip> */}\n </div>\n )\n }\n\n return (<>\n <Divider style={{ \"margin\": \"0px\", \"pointerEvents\": \"none\" }} plain><small style={{ \"fontSize\": \"8px\", \"color\": \"#777\", \"letterSpacing\": \"1.5px\" }}>FILTER GROUP</small></Divider>\n <div style={{\"maxHeight\": \"16vh\", \"width\": \"100%\", \"overflow\": \"auto\"}} >\n {meta_filters.map(item => {\n return drawFilter(item);\n })}\n </div>\n <Divider style={{ \"margin\": \"5px 0px\", \"pointerEvents\": \"none\" }} />\n {/* <pre>{JSON.stringify(metaSet, null, 2)}</pre> */}\n </>)\n}","import { CheckSquareFilled, CloseOutlined, CloseSquareFilled } from '@ant-design/icons';\nimport { Affix, Button, Col, Divider, Row, Space, Tag, Tooltip } from \"antd\";\nimport React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport conditional from \"../utils/conditional\";\nimport { bestsellerColor, handleTermSlash, objectToPath, pathToObject, successColor, ucfirst } from \"../utils/Utils\";\nimport DropMenu from \"./DropMenu\";\nimport FilterAutocomplete from \"./FilterAutocomplete\";\nimport FilterPresetLabel from \"./FilterPresetLabel\";\nimport FilterPresets from \"./FilterPresets\";\nimport MagicFilters from \"./MagicFilters\";\nimport Metafilters from \"./Metafilters\";\n\nexport default function BrowseFilters5(props) {\n\n const { \n context = {name : \"\"}, \n setToolboxes = () => {}, \n display_mode = \"\", \n block = false, \n listLabel = { key: \"\" }, \n toolboxes = {}, \n loading = true, \n filters = {}, \n setFilters = () => { }, \n header = \"status\", \n getBrowse = () => { }, \n searchFilters = {}, \n setSearchFilters = () => { }, \n display = \"\", \n path = \"/purchasing/browse\" \n } = props;\n const history = useHistory();\n const [metaSet, setMetaSet] = useState([]);\n const [vistoggle, setVistoggle] = useState(\"\");\n const changed = decodeURI(objectToPath(searchFilters).replace(\"/filter\", \"\")) !== history.location.pathname.replace(path, \"\").replace(\"/filter\", \"\");\n\n const tips = window.sitesettings.tool_tips;\n const go = () => {\n if (changed) {\n props.setCurrent(1);\n if (searchFilters.hasOwnProperty(\"o\")) {\n delete searchFilters.o;\n }\n getBrowse(false, searchFilters);\n history.push({ pathname: path + objectToPath(searchFilters, true) });\n setVistoggle(\"close\");\n }\n }\n\n const formatCount = (_count = \"0\") => {\n if (!_count) {\n return;\n }\n if (_count.length > 3) {\n if (_count.length > 6) {\n return _count.substring(0, _count.length - 5) / 10 + \"m\";\n }\n return _count.substring(0, _count.length - 3) + \"k\";\n }\n return _count\n }\n\n const resetFilter = (_key) => {\n setVistoggle(\"close\");\n setSearchFilters({ ...searchFilters, [_key]: [] });\n getBrowse(false, { ...searchFilters, [_key]: [] })\n\n }\n\n const getNameByKey = (_key, _letter) => {\n if (_key.substr(0, 1) === \"-\") {\n _key = _key.substr(1, _key.length);\n }\n let _fltr = filters.find(item => item.routing_char === _letter);\n if (_fltr && _fltr.hasOwnProperty(\"rows\")) {\n let _cat = _fltr.rows.find(item => item.key === _key);\n if (_cat) {\n return _cat.name;\n } else {\n let ret = _key;\n _fltr.rows.forEach(itm => {\n if (itm.hasOwnProperty(\"subfilter\")) {\n let _sub = itm.subfilter.find(item => item.key === _key);\n if (_sub) {\n ret = _sub.name;\n }\n }\n });\n return ret;\n }\n }\n return \"\";\n }\n\n const drawSelectedTags = (_selected = [], _letter, _exclude = false) => {\n // console.log(searchFilters);\n if (searchFilters.hasOwnProperty(_letter)) {\n _selected = searchFilters[_letter];\n } else {\n _selected = [];\n }\n return (\n <Row align=\"top\">\n <Col flex={\"100%\"} >\n <div style={{ \"marginTop\": \"-5px\", \"maxHeight\": \"10vh\", \"overflow\": \"auto\" }}>\n {_selected.filter(i => i !== \"AND\").map((item, index) => {\n return (\n <Tag key={index} onClick={(e) => { e.preventDefault(); e.stopPropagation(); toggleCategory(_letter, (item.substr(0, 1) === \"-\") ? item.substr(1, item.length) : item, true, (item.substr(0, 1) === \"-\") ? \"exclude\" : \"include\"); }} color={(item.substr(0, 1) === \"-\") ? \"red\" : \"green\"} onClose={(e) => { e.preventDefault(); e.stopPropagation(); toggleCategory(_letter, (item.substr(0, 1) === \"-\") ? item.substr(1, item.length) : item, true, (item.substr(0, 1) === \"-\") ? \"exclude\" : \"include\"); }} style={{ \"fontWeight\": \"normal\", \"padding\": \"0px 4px\", \"lineHeight\": \"12px\", \"color\": \"#888\", \"marginRight\": \"3px\", \"maxWidth\": \"212px\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }} closeIcon={<small><CloseOutlined style={{ \"fontSize\": \"7px\" }} /></small>} closable>\n <small>{getNameByKey(item, _letter)}</small>\n </Tag>\n )\n })}\n </div>\n </Col>\n </Row>\n )\n }\n\n const drawAllSelectedTags = () => {\n let count = 0;\n let ret = [];\n // PRESET \n ret.push(<FilterPresetLabel setToolboxes={setToolboxes} toolboxes={toolboxes} header={header} path={path} getBrowse={getBrowse} setSearchFilters={setSearchFilters} searchFilters={searchFilters} />)\n if(searchFilters.hasOwnProperty(\"p\") && searchFilters.p){\n count++; \n }\n\n ret.push(Object.keys(searchFilters).map((key, _index) => {\n if (Array.isArray(searchFilters[key])) {\n return searchFilters[key].filter(i => i !== \"AND\").map((item, index) => {\n if (getNameByKey(item, key) === \"\") {\n return;\n }\n count++;\n return (\n <Tag key={_index.toString() + index.toString()} onClick={(e) => { e.preventDefault(); e.stopPropagation(); toggleCategory(key, (item.substr(0, 1) === \"-\") ? item.substr(1, item.length) : item, true, (item.substr(0, 1) === \"-\") ? \"exclude\" : \"include\", true); }} color={(item.substr(0, 1) === \"-\") ? \"red\" : \"green\"} onClose={(e) => { e.preventDefault(); e.stopPropagation(); toggleCategory(key, (item.substr(0, 1) === \"-\") ? item.substr(1, item.length) : item, true, (item.substr(0, 1) === \"-\") ? \"exclude\" : \"include\", true) }} className=\"filterTag bcg2\" style={{ \"color\": \"#888\", \"marginRight\": \"5px\" }} closeIcon={<small><CloseOutlined style={{ \"fontSize\": \"7px\" }} /></small>} closable>\n <small>{getNameByKey(item, key)}</small>\n </Tag>\n )\n })\n }\n }))\n\n if (searchFilters.k && searchFilters.k !== \"keyword\") {\n if (history.location.pathname.includes(\"/k/\")) {\n ret.push(\n <Tag className=\"bcg2\" key={\"keyword\"} onClick={(e) => { setSearchFilters({ ...searchFilters, \"k\": \"keyword\" }); props.setCurrent(1); getBrowse(false, { ...searchFilters, \"k\": \"keyword\" }); history.push({ pathname: path + objectToPath({ ...searchFilters, \"k\": \"keyword\" }) }) }} color={\"green\"} onClose={(e) => { setSearchFilters({ ...searchFilters, \"k\": \"keyword\" }); props.setCurrent(1); getBrowse(false, { ...searchFilters, \"k\": \"keyword\" }); history.push({ pathname: path + objectToPath({ ...searchFilters, \"k\": \"keyword\" }) }); }} style={{ \"color\": \"#888\" }} closeIcon={<small><CloseOutlined style={{ \"fontSize\": \"7px\" }} /></small>} closable>\n <small>Search Type: {ucfirst(searchFilters.k)}</small>\n </Tag>\n )\n }\n }\n\n // Search Term\n if (searchFilters.t) {\n\n let _temp = handleTermSlash(searchFilters.t, false);\n let _split = _temp.split(\" \");\n count++;\n ret.push(_split.map(_itm => {\n if (!_itm) {\n return;\n }\n return (\n <Tag className=\"bcg2\" key={_itm} onClick={(e) => { setSearchFilters({ ...searchFilters, \"t\": handleTermSlash(_split.filter(trm => trm !== _itm).join(\" \"), true) }); props.setCurrent(1); getBrowse(false, { ...searchFilters, \"t\": handleTermSlash(_split.filter(trm => trm !== _itm).join(\" \"), true) }); history.push({ pathname: path + objectToPath({ ...searchFilters, \"t\": handleTermSlash(_split.filter(trm => trm !== _itm).join(\" \"), true) }) }) }} color={\"green\"} onClose={(e) => { setSearchFilters({ ...searchFilters, \"o\": 0, \"t\": handleTermSlash(_split.filter(trm => trm !== _itm).join(\" \"), true) }); props.setCurrent(1); getBrowse(false, { ...searchFilters, \"t\": handleTermSlash(_split.filter(trm => trm !== _itm).join(\" \"), true) }); history.push({ pathname: path + objectToPath({ ...searchFilters, \"o\": 0, \"t\": handleTermSlash(_split.filter(trm => trm !== _itm).join(\" \"), true) }) }); }} style={{ \"color\": \"#888\" }} closeIcon={<small><CloseOutlined style={{ \"fontSize\": \"7px\" }} /></small>} closable>\n\n <small>{(listLabel.key == _itm) ? listLabel.value : _itm}</small>\n </Tag>\n )\n }))\n }\n\n\n // Series\n if (searchFilters.z) {\n count++;\n let set = { ...searchFilters, \"z\": \"\"}\n ret.push(\n <Tag className=\"bcg2\" key={\"list\"} onClick={(e) => { setSearchFilters(set); props.setCurrent(1); props.setTitle(\"Browse\"); getBrowse(false, set); history.push({ pathname: path + objectToPath(set) }) }} color={\"green\"} onClose={(e) => { setSearchFilters(set); props.setCurrent(1); props.setTitle(\"Browse\"); getBrowse(false, set); history.push({ pathname: path + objectToPath(set) }); }} style={{ \"color\": \"#888\" }} closeIcon={<small><CloseOutlined style={{ \"fontSize\": \"7px\" }} /></small>} closable>\n <small>{searchFilters.z}</small>\n </Tag>\n )\n }\n\n\n\n\n // List\n if (searchFilters.x) {\n count++;\n let set = { ...searchFilters, \"x\": \"\", \"v\": \"\" }\n ret.push(\n <Tag className=\"bcg2\" key={\"list\"} onClick={(e) => { setSearchFilters(set); props.setCurrent(1); props.setTitle(\"Browse\"); getBrowse(false, set); history.push({ pathname: path + objectToPath(set) }) }} color={\"green\"} onClose={(e) => { setSearchFilters(set); props.setCurrent(1); props.setTitle(\"Browse\"); getBrowse(false, set); history.push({ pathname: path + objectToPath(set) }); }} style={{ \"color\": \"#888\" }} closeIcon={<small><CloseOutlined style={{ \"fontSize\": \"7px\" }} /></small>} closable>\n <small>{context.name || searchFilters.x}</small>\n </Tag>\n )\n }\n\n\n // CLEAR ALL FILTERS\n ret.push(<Button key={\"thing\"} onClick={() => {\n if (searchFilters.hasOwnProperty(\"x\")) {\n let _obj = {}\n //_obj.x = searchFilters.x;\n if (searchFilters.hasOwnProperty(\"v\") && searchFilters.v !== \"sequence\") {\n _obj.v = searchFilters.v;\n } else {\n _obj.v = \"\";\n }\n _obj.o = 0;\n setSearchFilters(_obj);\n props.setCurrent(1);\n getBrowse(false, _obj);\n history.push({ pathname: path + objectToPath(_obj) });\n } else {\n setSearchFilters(pathToObject(\"/\"));\n props.setCurrent(1);\n getBrowse(false, pathToObject(\"/\"));\n history.push({ pathname: path, state: \"bm_reset\" + Math.random(100).toString() })\n }\n }}\n style={{ \"height\": \"22px\", \"marginTop\": \"1px\", \"lineHeight\": \"12px\", \"marginRight\": \"6px\", \"padding\" : \"0px\" }} type=\"link\" size=\"small\"><em>← Clear filters</em></Button>)\n if (count > 0) {\n return (\n <div style={{ \"marginTop\": \"-20px\", \"marginBottom\": \"-5px\" }}>\n <br clear=\"all\" />\n <Divider dashed style={{ \"margin\": \"8px 0px\", \"marginBottom\": \"10px\" }} />\n <div style={{ \"minHeight\": \"29px\", \"maxHeight\": \"87px\", \"overflow\": \"auto\" }}>\n <Space>\n {(!((searchFilters.hasOwnProperty(\"x\") && (searchFilters.hasOwnProperty(\"x\")))) && <>\n {/* [TODO] */}\n {/* <FilterPresets showselected toolboxes={toolboxes} header={header} path={path} getBrowse={getBrowse} setSearchFilters={setSearchFilters} searchFilters={searchFilters} /> */}\n </>)}\n <Space wrap size={[0, 5]}>\n {ret}\n </Space>\n </Space>\n </div>\n </div>\n );\n }\n return \"\";\n }\n\n const toggleCategory = (_letter, _key, concat = false, action = \"label\", go = false) => {\n\n \n \n let value = (searchFilters.hasOwnProperty(_letter)) ? [...searchFilters[_letter]] : []\n switch (action) {\n case \"label\":\n value = [_key]\n break;\n case \"include\":\n if (value.includes(_key)) {\n // remove\n value = [...searchFilters[_letter]].filter(item => item !== _key);\n } else {\n value.push(_key);\n }\n break;\n case \"exclude\":\n if (value.includes(\"-\" + _key)) {\n\n // remove\n value = [...searchFilters[_letter]].filter(item => item !== \"-\" + _key);\n } else {\n value.push(\"-\" + _key);\n }\n break;\n default:\n value = [_key]\n break\n }\n if (action === \"label\") {\n value = [_key]\n }\n setSearchFilters({ ...searchFilters, [_letter]: value });\n props.setCurrent(1);\n if (action === \"label\" || go) {\n setVistoggle(\"close\");\n let _f = { ...searchFilters, [_letter]: value }\n // reset pagination\n // if (_f.hasOwnProperty(\"l\")) {\n // delete _f.l;\n // }\n if (_f.hasOwnProperty(\"o\")) {\n delete _f.o;\n }\n getBrowse(false, _f);\n history.push({ pathname: path + objectToPath(_f) })\n }\n return;\n }\n\n const drawCategories = (_rows = [], _filter) => {\n let _required = [];\n let _negated = [];\n let _metafilter = false;\n if (metaSet.length > 0 && _filter.meta_filters.length > 0) {\n metaSet.forEach(item => {\n if (item.hasOwnProperty(\"negate\") && item.negate) {\n _negated = _negated.concat(item.filters);\n } else {\n _required = _required.concat(item.filters);\n }\n })\n _metafilter = true;\n }\n return _rows.map((category, index) => {\n const {\n key = \"\",\n count = \"\",\n subfilter = []\n } = category;\n const name = category.name;\n if (_metafilter) {\n if (_required.length > 0 && !_required.includes(key)) {\n return (<></>);\n }\n if (_negated.length > 0 && _negated.includes(key)) {\n return;\n }\n }\n if (key === \"--\") {\n return (<div key={index} style={{ \"marginRight\": \"15px\" }}><Divider style={{ \"margin\": \"0px\", \"pointerEvents\": \"none\" }} plain><small style={{ \"fontSize\": \"8px\", \"color\": \"#777\", \"letterSpacing\": \"1.5px\" }}>{name.toUpperCase()}</small></Divider></div>)\n }\n let any_included = false;\n let any_excluded = false;\n if (searchFilters.hasOwnProperty(_filter.routing_char) && searchFilters[_filter.routing_char].length > 0) {\n if (searchFilters[_filter.routing_char][0].substr(0, 1) === \"-\") {\n any_excluded = true;\n } else {\n any_included = true;\n }\n }\n let is_included = (searchFilters.hasOwnProperty(_filter.routing_char) && searchFilters[_filter.routing_char].includes(key)) || false;\n let is_excluded = (searchFilters.hasOwnProperty(_filter.routing_char) && searchFilters[_filter.routing_char].includes(\"-\" + key)) || false;\n let both = true;\n if (searchFilters.hasOwnProperty(_filter.routing_char) && searchFilters[_filter.routing_char].length > 0) {\n both = false;\n }\n return (\n <div key={index}>\n <div style={{ \"float\": \"right\", \"marginRight\": \"12px\" }}>\n <Space size={2}>\n <div className={(any_included) ? \"disabled\" : \"\"}><CloseSquareFilled key={\"exclude\"} onClick={() => (any_included) ? () => { } : toggleCategory(_filter.routing_char, key, true, \"exclude\")} style={{ \"color\": (is_excluded) ? bestsellerColor : \"#bbb\", \"opacity\": (count > 0) ? \"1\" : \"0.2\", \"pointerEvents\": (count > 0) ? \"auto\" : \"none\" }} /></div>\n <div className={(any_excluded) ? \"disabled\" : \"\"}><CheckSquareFilled key={\"include\"} onClick={() => (any_excluded) ? () => { } : toggleCategory(_filter.routing_char, key, true, \"include\")} style={{ \"color\": (is_included) ? successColor : \"#bbb\", \"opacity\": (count > 0) ? \"1\" : \"0.2\", \"pointerEvents\": (count > 0) ? \"auto\" : \"none\" }} /></div>\n </Space>\n </div>\n <div className=\"c\" onClick={() => toggleCategory(_filter.routing_char, key, false, \"label\")} style={{ \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"maxWidth\": \"150px\", \"whiteSpace\": \"nowrap\", \"cursor\": \"pointer\", \"opacity\": (count > 0) ? \"1\" : \"0.5\", \"pointerEvents\": (count > 0) ? \"auto\" : \"none\" }}>\n <small><div style={{ \"color\": \"#999\", \"fontSize\": \"9px\", \"width\": \"25px\", \"display\": \"inline-block\" }}>{formatCount(count)}</div> <span className=\"c\">\n <Tooltip mouseEnterDelay={0.5} title={(tips[key]) ? (tips[key]) : name}>{(is_included || is_excluded) ? <strong>{name}</strong> : name}</Tooltip>\n </span> </small>\n </div>\n {(subfilter.length > 0 &&\n subfilter.map((item, index) => {\n is_included = (searchFilters.hasOwnProperty(_filter.routing_char) && searchFilters[_filter.routing_char].includes(item.key)) || false;\n is_excluded = (searchFilters.hasOwnProperty(_filter.routing_char) && searchFilters[_filter.routing_char].includes(\"-\" + item.key)) || false;\n return (\n <div key={index}>\n <div style={{ \"float\": \"right\", \"marginRight\": \"12px\" }}>\n <Space size={2}>\n <div className={(any_included) ? \"disabled\" : \"\"}><CloseSquareFilled onClick={() => (any_included) ? () => { } : toggleCategory(_filter.routing_char, item.key, true, \"exclude\")} style={{ \"color\": (is_excluded) ? bestsellerColor : \"#bbb\", \"opacity\": (item.count > 0) ? \"1\" : \"0.2\", \"pointerEvents\": (item.count > 0) ? \"auto\" : \"none\" }} /></div>\n <div className={(any_excluded) ? \"disabled\" : \"\"}><CheckSquareFilled onClick={() => (any_excluded) ? () => { } : toggleCategory(_filter.routing_char, item.key, true, \"include\")} style={{ \"color\": (is_included) ? successColor : \"#bbb\", \"opacity\": (item.count > 0) ? \"1\" : \"0.2\", \"pointerEvents\": (item.count > 0) ? \"auto\" : \"none\" }} /></div>\n </Space>\n </div>\n <Tooltip mouseEnterDelay={0.5} title={<small>{item.name}<span style={{ \"color\": \"#999\", \"fontSize\": \"9px\" }}>{formatCount(item.count)}</span></small>}>\n <div onClick={() => toggleCategory(_filter.routing_char, item.key, false, \"label\")} style={{ \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\", \"maxWidth\": \"130px\", \"whiteSpace\": \"nowrap\", \"cursor\": \"pointer\", \"opacity\": (item.count > 0) ? \"1\" : \"0.5\", \"pointerEvents\": (item.count > 0) ? \"auto\" : \"none\" }}>\n <small><div style={{ \"color\": \"#999\", \"fontSize\": \"9px\", \"width\": \"25px\", \"display\": \"inline-block\" }}>{formatCount(item.count)}</div> <span className=\"c\">- {(is_included || is_excluded) ? <strong>{item.name}</strong> : item.name}</span> </small>\n </div>\n </Tooltip>\n </div>\n )\n })\n )}\n </div>\n )\n })\n }\n\n const drawHeader = (_filter = {}) => {\n\n const {\n exclude = false,\n title = \"\",\n routing_char = \"r\",\n selected_rows = [],\n rows = [],\n } = _filter;\n\n return (<>\n <div>\n <Row>\n <Col flex={\"auto\"}><span className=\"c\" style={{ \"fontWeight\": \"600\" }}>{title}</span></Col>\n <Col flex={\"140px\"}>\n <div style={{ \"float\": \"right\", \"fontWeight\": \"normal\", \"color\": \"#ccc\", \"fontSize\": \"9px\", \"marginRight\": \"0px\", \"marginTop\": \"0px\" }}>\n <Space size={3}>\n <div className=\"ant-radio-group-solid ant-radio-group-small\">\n <Button onClick={(e) => toggleCategory(routing_char, \"AND\", false, \"include\")} disabled={!(searchFilters.hasOwnProperty(routing_char) && searchFilters[routing_char].length > 1)} type={(searchFilters.hasOwnProperty(routing_char) && searchFilters[routing_char].includes(\"AND\")) ? \"primary\" : \"default\"} style={{ \"borderRight\": \"none\", \"borderRadius\": \"2px 0 0 2px\" }} className=\"tiny-radio\" >\n <Tooltip mouseEnterDelay={0.5} title={<>Include All<br /><small>When selected, titles must match all included filters instead of any.</small></>}>\n <small>All</small>\n </Tooltip>\n </Button>\n <Button onClick={(e) => toggleCategory(routing_char, \"AND\", false, \"include\")} disabled={!(searchFilters.hasOwnProperty(routing_char) && searchFilters[routing_char].length > 1)} type={(searchFilters.hasOwnProperty(routing_char) && searchFilters[routing_char].includes(\"AND\")) ? \"default\" : \"primary\"} style={{ \"borderRadius\": \"0 2px 2px 0\" }} className=\"tiny-radio\" >\n <Tooltip mouseEnterDelay={0.5} title={<>Include Any<br /><small>When selected, titles must match at least one of the included filters instead of all.</small></>}>\n <small>Any</small>\n </Tooltip>\n </Button>\n </div>\n <Col flex={\"25px\"}>\n <Button style={{ \"padding\": \"0px 7px\", \"marginTop\": \"0px\" }} onClick={() => go()} disabled={(!changed)} size=\"small\" type=\"primary\" className=\"tiny-btn\"><small>Go!</small></Button>\n </Col>\n\n <Button style={{ \"marginTop\": \"0px\" }} onClick={() => resetFilter(routing_char)} disabled={!(searchFilters.hasOwnProperty(routing_char) && searchFilters[routing_char].length > 0)} size=\"small\" className=\"tiny-btn\" type=\"primary\"><small>Reset</small></Button>\n\n </Space>\n </div>\n <br clear=\"all\" />\n </Col>\n </Row>\n <div className=\"shim\" />\n\n <conditional.true value={(_filter.name !== \"all\")}>\n <FilterAutocomplete searchFilters={searchFilters} name={_filter.name} filters={filters} setFilters={setFilters} />\n </conditional.true>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n </div>\n\n <conditional.true value={(searchFilters.hasOwnProperty(routing_char) && searchFilters[routing_char].length > 0)}>\n {drawSelectedTags(selected_rows, routing_char, exclude)}\n <Divider dashed style={{ \"margin\": \"8px 0px\", \"marginTop\": \"0px\" }} />\n </conditional.true>\n </>\n )\n }\n\n const drawFilter = (_filter = {}) => {\n\n const {\n rows = [],\n } = _filter;\n return (\n <>\n <div style={{ \"marginLeft\": \"5px\" }}>{drawCategories(rows, _filter)}</div>\n </>\n )\n }\n\n const drawFilterBoxes = () => {\n return filters.map((filter, index) => {\n let align_left = (index > (filters.length - 3))\n return (\n <DropMenu alignLeft={align_left} block={block} vistoggle={vistoggle} setVistoggle={setVistoggle} onClose={go} key={index} \n label={<>{drawHeader(filter)} <Metafilters metaSet={metaSet} setMetaSet={setMetaSet} filter={filter} /> </>} \n count={filter.rows.length} \n active={(filter.selected_rows.filter(item => item !== \"AND\").length)} \n title={filter.title}>\n <div style={{\"width\": \"100%\", \"maxHeight\": \"25vh\", \"overflow\": \"auto\"}} >\n <MagicFilters getBrowse={getBrowse} path={path} searchFilters={searchFilters} setSearchFilters={setSearchFilters} filter={filter} />\n {drawFilter(filter)}\n </div>\n </DropMenu>\n )\n })\n }\n\n const drawFilters = () => {\n return (\n // <conditional.true value={(filters.length > 0)}>\n <div>\n <div className=\"trans\" style={{\"padding\": \"10px 20px\", \"paddingBottom\": \"0px\", \"opacity\": (loading) ? \"0.5\" : 1 }}>\n <div style={{ \"float\": \"right\" }}>\n <Space size={20}>\n {display}\n </Space>\n </div>\n <div style={{\"display\": \"flex\", \"justifyContent\": \"stretch\", \"gap\": \"5px\" }}>\n <FilterPresets toolboxes={toolboxes} header={header} path={path} getBrowse={getBrowse} setSearchFilters={setSearchFilters} searchFilters={searchFilters} />\n {drawFilterBoxes()}\n </div>\n <div>\n {drawAllSelectedTags()}\n </div>\n </div>\n <div className=\"afix\"></div>\n </div>\n // </conditional.true>\n )\n }\n\n const draw = () => {\n if (display_mode === \"calendar\") {\n return <>{drawFilters()}<div className=\"shim\" /><div className=\"shim\" /></>\n }\n return (<Affix className=\"afix\" \n style={{ \"paddingBottom\": \"10px\" }} \n offsetTop={85}>{drawFilters()}</Affix>)\n }\n\n return draw();\n}","\nimport React, { useState } from \"react\";\nimport { message, Button, Modal, Input, Typography, Divider, Space } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport { CopyOutlined } from '@ant-design/icons';\nimport { addCommas, pluralize } from \"../utils/Utils\";\nexport default function CopyISBNs(props) {\n\n const { searchFilters = {} } = props;\n const [isbns, setIsbns] = useState([]);\n const [loading, setLoading] = useState(false);\n const [visible, setVisible] = useState(false);\n\n const [copied, setCopied] = useState(false);\n const copyToClipboard = (_isbns) => {\n if (!navigator.clipboard) {\n message.error(\"Can't copy\");\n return;\n }\n\n navigator.clipboard.writeText(_isbns);\n setCopied(true);\n setTimeout(() => {\n setCopied(false)\n }, 2000);\n }\n\n\n const fetchISBNs = () => {\n let _filters = { ...searchFilters }\n _filters[\"isbn_only\"] = true;\n _filters[\"l\"] = 10000;\n setLoading(true);\n apiCall(\"browse/get\", _filters, (_status, _result) => {\n if (_status) {\n setIsbns(_result.rows);\n setVisible(true);\n setLoading(false);\n } else {\n message.error(_result.error);\n }\n });\n }\n\n const close = () => {\n setVisible(false);\n setIsbns([]);\n }\n\n const drawModal = () => {\n return (\n <>\n <Modal destroyOnClose footer={null} onCancel={() => close()} visible={visible}>\n <Typography.Title level={5}>Copy {(isbns.length) ? <>{addCommas(isbns.length)}{pluralize(isbns.length,\" ISBN\", \"s\")}</> : \"\"}</Typography.Title>\n <Divider style={{\"marginTop\" : \"15px\", \"marginBottom\" : \"10px\"}} />\n <small style={{\"opacity\" : \"0.6\"}}>Only the first 10,000 ISBNs can be copied.</small>\n <div className=\"shim\" /><div className=\"shim\" />\n <Input.TextArea style={{\"fontFamily\" : \"ApercuMono\"}} rows={8} defaultValue={isbns.join(\"\\n\")}></Input.TextArea>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n \n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close()}>Cancel</Button>\n <Button onClick={() => copyToClipboard(isbns.join(\"\\n\"))} type={(copied) ? \"primary\" : \"default\"}> \n \n {(copied) ? <>{(isbns.length) ? <>{addCommas(isbns.length)}{pluralize(isbns.length,\" ISBN\", \"s\")}</> : \"\"} copied to clipboard!</> : <>Copy {(isbns.length) ? <>{addCommas(isbns.length)}{pluralize(isbns.length,\" ISBN\", \"s\")}</> : \"\"}  to clipboard</>}\n \n \n </Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Modal>\n </>\n )\n }\n\n return (\n <>\n {drawModal()}\n <Button size=\"small\" loading={loading} onClick={() => fetchISBNs()} type=\"primary\"><small><CopyOutlined /> Copy ISBNs</small></Button>\n </>\n )\n}","import { Button, Tooltip, message } from \"antd\";\nimport React from \"react\";\nimport { FunnelPlotOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport { useHistory } from \"react-router-dom\";\nimport { objectToPath } from \"../utils/Utils\";\nexport default function Refine(props) {\n\n const { path = \"\", getBrowse = () => { }, searchFilters = {}, setSearchFilters = () => { } } = props;\n\n const history = useHistory();\n const fetchRefine = () => {\n\n let _filters = { ...searchFilters }\n\n if (_filters[\"t\"]) {\n _filters[\"t\"] = _filters[\"t\"].replace(\"%25\", \"%\");\n _filters[\"t\"] = _filters[\"t\"].replace(\"%2f\", \"/\");\n }\n\n apiCall(\"browse/refine\", _filters, (_status, _result) => {\n if (_status) {\n let _f = {x : _result.key}; \n \n if(searchFilters.v){\n _f.v = searchFilters.v; \n } \n\n \n history.push({ pathname: path + objectToPath(_f) })\n setSearchFilters(_f);\n getBrowse(false, _f);\n } else {\n message.error(_result.error);\n }\n })\n }\n\n\n return (<Tooltip title={<small>Consolidate current results for further refinement</small>}><Button type=\"primary\" onClick={() => fetchRefine()} icon={<small><FunnelPlotOutlined /></small>} size=\"small\"><small>  Refine results</small></Button></Tooltip>)\n}","import React from \"react\";\nimport moment from \"moment\";\nimport { Table } from \"antd\";\nexport default function SalesSummary(props) {\n\n const { conditions = [{}] } = props;\n\n const parseData = () => {\n let c = conditions[0];\n let ret = []\n if (c.hasOwnProperty(\"received\")) {\n if (c.received) {\n if(!c.received.hasOwnProperty(\"months\")){\n c.received.months = [0,0,0,0,0,0,0,0,0,0,0,0,0,0];\n }\n ret.push({\n className: \"rowRcvd\",\n s1: c.received.months[11],\n s2: c.received.months[12],\n s3: c.received.months[13],\n total: c.received.total,\n week: c.received.week\n })\n }\n }\n if (c.hasOwnProperty(\"sold\")) {\n if (c.sold.hasOwnProperty(\"months\")) {\n\n if(!c.sold.hasOwnProperty(\"months\")){\n c.sold.months = [0,0,0,0,0,0,0,0,0,0,0,0,0,0];\n }\n\n ret.push({\n className: \"rowSold\",\n s1: c.sold.months[11],\n s2: c.sold.months[12],\n s3: c.sold.months[13],\n total: c.sold.total,\n week: c.sold.week\n })\n }\n }\n if (c.hasOwnProperty(\"peer\")) {\n if (c.peer.hasOwnProperty(\"months\")) {\n ret.push({\n className: \"rowPeer\",\n s1: c.peer.months[11],\n s2: c.peer.months[12],\n s3: c.peer.months[13],\n // don't display total on peer data\n total: c.peer.total_stores + c.peer.total_stores_region,\n week: c.peer.week\n })\n }\n }\n // fill out the table if it's missing rows\n let diff = 3 - ret.length; \n if(diff){\n for(let i = 0; i<diff; i++){\n ret.push({total : <> </>})\n }\n }\n return ret;\n }\n const checkBold = (e, f) => {\n if (!e) {\n return \"\";\n }\n if (f.label !== \"Adj\" && f.label !== \"Retn\" && f.label !== \"Peer\") {\n return (<strong>{e}</strong>);\n } else {\n return e;\n }\n }\n\n const columns = [\n {\n title: <small className=\"c\">Ttl</small>, width: \"25px\", className: \"cellBorder\", dataIndex: 'total', key: 'total', render: (e, f) => { return (e) ? e : \"\" }\n },\n { title: <small>{moment().startOf(\"month\").add(-2, \"month\").format(\"MMM\")}</small>, dataIndex: 's1', key: 's1', render: (e, f) => { return checkBold(e, f) } },\n { title: <small>{moment().startOf(\"month\").add(-1, \"month\").format(\"MMM\")}</small>, dataIndex: 's2', key: 's2', render: (e, f) => { return checkBold(e, f) } },\n { className: \"cellBorder\", title: <small>{moment().startOf(\"month\").format(\"MMM\")}</small>, dataIndex: 's3', key: 's3', render: (e, f) => { return checkBold(e, f) } },\n {\n title: <small>Wk</small>, width: \"27px\", dataIndex: 'week', key: 'week', render: (e, f) => {\n return (e) ? <em>{e}</em> : \"\";\n }\n },\n ]\n return (\n <>\n <Table\n rowClassName={(record, index) => {\n return record.className;\n }}\n size=\"small\"\n className=\"miniHistory columnHeaders\"\n style={{ \"marginRight\": \"1px\", \"borderTop\": \"none\", \"width\": \"0px\" }}\n dataSource={parseData()}\n columns={columns}\n pagination={false}\n />\n </>\n )\n}","import React from \"react\";\nimport { Layout, Typography, Divider, Button } from \"antd\";\n\nexport default function LayoutHeader(props) {\n\n const { title = \"\", description = \"\", button = \"\", filters = \"\", todo = false } = props;\n\n return (\n\n\n <Layout.Content style={{\"padding\": \"0px\" }} >\n <div className=\"layoutHeader\">\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>\n {title}\n {(todo && <span style={{ \"color\": \"#aaa\" }}> [<small><em> TODO </em></small>]</span>)}\n </div>\n </Typography.Title>\n <Divider dashed style={{ \"marginTop\": \"10px\", \"marginBottom\": \"15px\" }} />\n {(button &&\n <div style={{ \"float\": \"right\" }}>\n {button}\n </div>\n )}\n\n {(description && <p>{description}</p>)}\n\n {((filters) && filters)}\n </div>\n </Layout.Content>\n\n )\n}","import { AppstoreOutlined, BarChartOutlined, CalendarOutlined, CloseOutlined, MenuOutlined, PicLeftOutlined, PushpinFilled, PushpinOutlined, SelectOutlined } from '@ant-design/icons';\nimport { Button, Col, Divider, Form, Input, Layout, message, Radio, Row, Select, Space, Spin, Table, Tooltip, Typography } from \"antd\";\nimport Cookies from \"js-cookie\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\nimport LazyLoad from 'react-lazyload';\nimport { forceCheck } from 'react-lazyload';\nimport { useHistory, useLocation } from \"react-router-dom\";\n\nimport Bookmark from \"../components/Bookmark\";\nimport BrowseFilters5 from \"../components/BrowseFilters5\";\nimport CopyISBNs from \"../components/CopyISBNs\";\nimport ItemLayouts from \"../components/ItemLayouts\";\nimport ItemSales2 from \"../components/ItemSales2\";\nimport Order from \"../components/Order\";\nimport Overlay from \"../components/Overlay\";\nimport Paginate from \"../components/Paginate\";\nimport Refine from \"../components/Refine\";\nimport Renderer from \"../components/Renderer\";\nimport SalesSummary from \"../components/SalesSummary\";\nimport TestOrderBox from \"../components/TestOrderBox\";\nimport Share from '../components/title/Share';\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport nocover from \"../media/no-cover.png\";\nimport conditional from \"../tools/conditional\";\nimport { apiCall } from \"../utils/Api\";\nimport { usePrefs } from \"../utils/Prefs\";\nimport { useSession } from \"../utils/Session\";\nimport { bestsellerColor, drawQuantity, futureColor, handleTermSlash, makeKey, objectToPath, parseSubjectsWeird, pathToObject, peerColor, returnedColor, successColor, toUriHash, warningColor } from \"../utils/Utils\";\nimport Pins from \"./Pins\";\nimport TitleRank from '../components/title/TitleRank';\n\nexport default function BrowsePage4() {\n\n const path = \"/purchasing/browse\";\n const location = useLocation();\n const history = useHistory();\n const [session, setSession] = useSession();\n const [results, setResults] = useState({ filter_info: [], rows: [], toolboxes: {} })\n const [loading, setLoading] = useState(false);\n const [filters, setFilters] = useState([]);\n const [display, setDisplay] = useState((Cookies.get(\"browse_show_list\")) ? Cookies.get(\"browse_show_list\") : \"details2\");\n const [expanded, setExpanded] = useState([]);\n const [searchFilters, setSearchFilters] = useState(pathToObject(location.pathname, \"browse_limit\"))\n const [current, setCurrent] = useState(parseInt(searchFilters.o / searchFilters.l) + 1);\n const [change, setChange] = useState({})\n const [title, setTitle] = useState(\"Browse\");\n const [initLoaded, setInitLoaded] = useState(false);\n const [prefs, setPrefs] = usePrefs();\n const [listLabel, setListLabel] = useState({ key: \"\", value: \"\" })\n const [listID, setListID] = useState(\"\");\n\n const [toolboxes, setToolboxes] = useState({});\n\n const canSequence = () => {\n\n\n if (!searchFilters.hasOwnProperty(\"x\")) {\n return false;\n }\n if (!searchFilters.x) {\n return false;\n }\n\n return true;\n }\n\n function completeSuggestedCart() {\n let args = {\n store_id: session.corp_id,\n cart_id: results.context.list_id,\n done: true,\n };\n apiCall(\"suggested_cart/toggleDone\", args, (_status, _result) => {\n if (_status) {\n window.open(\"/purchasing/suggested-carts\", \"_self\");\n }\n })\n }\n\n const getHeader = () => {\n // No context, do nothing\n if (!results.hasOwnProperty(\"context\")) {\n return (\n <Space>\n <div>Browse</div>\n <Share store_path={location.pathname.substring(1, location.pathname.length)} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n );\n }\n let {\n name = \"\",\n list_id = \"\",\n header = \"\",\n type = \"\"\n } = results.context;\n\n\n // LIST, CATALOGUE, CART SUGGESTION, TEMP\n // eslint-disable-next-line default-case\n switch (type) {\n case \"list\":\n // setListLabel({ [searchFilters.x]: name });\n return (\n <div>Browsing list:\n <Space>\n <span onClick={() => window.open(\"/purchasing/my-lists/filter/t/\" + list_id, \"_blank\")} className=\"browse-list-title\">{name} ({results.row_count} titles)  <SelectOutlined style={{ \"transform\": \"scaleX(-1)\", \"fontSize\": \"10px\" }} />\n </span>\n <Share customer_path={\"lists/\" + list_id} store_path={\"biz/purchasing/browse/filter/x/\" + list_id + \"/v/sequence\"} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n </div>\n )\n case \"catalogue\":\n return (\n <div>Browsing catalogue:\n <Space>\n <span onClick={() => window.open(\"/purchasing/catalogues/filter/t/\" + list_id, \"_blank\")} className=\"browse-list-title\">\n {name} ({results.row_count} titles)  <SelectOutlined style={{ \"transform\": \"scaleX(-1)\", \"fontSize\": \"10px\" }} />\n </span>\n <Share store_path={\"biz/purchasing/browse/filter/x/\" + list_id + \"/v/sequence\"} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n </div>\n )\n case \"analytics\":\n return (\n <Space>\n <div>Browsing {name}</div>\n <Share store_path={location.pathname.substring(1, location.pathname.length)} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n )\n case \"cart_suggestion\":\n return (\n <Space>\n <div>Browsing {name}</div>\n <Button type='primary' size='small' onClick={() => completeSuggestedCart()}>\n Complete Suggested Cart\n </Button>\n </Space>\n )\n case \"temporary\":\n return (\n <Space>\n <div>Browsing {name}</div><Share store_path={location.pathname.substring(1, location.pathname.length)} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n )\n }\n\n // SERIES \n if (searchFilters.hasOwnProperty(\"k\") && searchFilters.k === \"series\") {\n let _term = searchFilters.hasOwnProperty(\"t\") ? searchFilters.t : \"\";\n return (<>Browse\n <Space>\n <span style={{ \"fontWeight\": \"normal\", \"color\": \"#666\", \"fontSize\": \"13px\" }}> - {_term} (series)</span>\n <Share customer_path={\"lists/\" + list_id} store_path={\"biz/purchasing/browse/filter/x/\" + list_id + \"/v/sequence\"} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n </>)\n }\n\n // PRESET \n let m = pathToObject(location.pathname);\n if (m.hasOwnProperty(\"p\")) {\n return (<>Browse <span style={{ \"fontWeight\": \"normal\", \"color\": \"#666\", \"fontSize\": \"13px\" }}>Preset</span></>)\n }\n\n\n return (\n <Space>\n <div>Browse</div>\n <Share store_path={location.pathname.substring(1, location.pathname.length)} >\n <Button size='small'>\n <small>Share</small>\n </Button>\n </Share>\n </Space>\n );\n\n\n }\n\n const setStateChange = (_e) => {\n getBrowse(_e)\n }\n\n const setSupplier = (_supplier) => {\n apiCall(\"session/setSupplier\", { supplier: _supplier }, (_status, _result) => {\n if (_status) {\n setSession(_result);\n getBrowse();\n }\n })\n }\n\n\n const getBrowse = (_change = false, _obj = searchFilters, _route = true) => {\n if (loading) { return; }\n setLoading(true);\n let _filters = { ..._obj }\n if (_filters[\"t\"]) {\n _filters[\"t\"] = _filters[\"t\"].replace(\"%25\", \"%\");\n _filters[\"t\"] = _filters[\"t\"].replace(\"%2f\", \"/\");\n }\n if (_change) {\n _filters[\"click_info\"] = JSON.stringify(_change);\n }\n apiCall(\"browse/get\", _filters, (_status, _result) => {\n if (_status) {\n // console.log(_result)\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n setFilters(_result.filter_info);\n setToolboxes(_result.toolboxes);\n setResults(_result);\n setExpanded([]);\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n forceCheck();\n if (_change) {\n updateFilters(_result.filter_info, _route);\n } else {\n setLoading(false);\n }\n setInitLoaded(true);\n } else {\n message.error(_result.error);\n setLoading(false);\n }\n });\n }\n\n const [flag, setFlag] = useState(false);\n const routeFilters = (_sf, _route) => {\n let _filter_path = objectToPath(_sf);\n if (_route) {\n setFlag(true);\n history.push({ pathname: path + _filter_path })\n }\n setLoading(false);\n }\n\n const updateFilters = (_arr, _route, o = searchFilters.o, l = searchFilters.l, t = searchFilters.t, k = searchFilters.k, v = searchFilters.v, p = searchFilters.p, z = searchFilters.z) => {\n let _sf = {}\n _arr.forEach(element => {\n if (element.selected_rows.length > 0) {\n _sf[element.routing_char] = (element.exclude) ? element.selected_rows.map(itm => \"-\" + itm) : element.selected_rows;\n }\n });\n\n _sf.o = o;\n _sf.l = l;\n _sf.t = t;\n _sf.k = k;\n _sf.v = v;\n _sf.p = p;\n _sf.z = z;\n\n setSearchFilters(_sf);\n if (_route) {\n routeFilters(_sf, _route);\n } else {\n setLoading(false);\n }\n }\n\n\n // Call on back/forward button\n const [refresh, setRefresh] = useState(false)\n const onPopState = () => {\n setRefresh(!refresh);\n }\n\n useEffect(() => {\n window.addEventListener('popstate', onPopState);\n return () => {\n window.removeEventListener('popstate', onPopState);\n };\n }, []);\n\n\n const headerSearch = () => {\n setLoading(true);\n let obj = pathToObject(location.pathname, \"browse_limit\");\n setSearchFilters(obj);\n getBrowse(false, obj);\n }\n useEffect(headerSearch, [history.location.state, refresh])\n // const updateSearchWithin = () => {\n // let obj = pathToObject(location.pathname, \"browse_limit\");\n // if (obj.hasOwnProperty(\"t\") && (obj.t)) {\n // form.setFieldsValue({ \"customer_search\": handleTermSlash(obj.t, false) });\n // }\n // }\n // useEffect(updateSearchWithin, [history.location.pathname])\n\n const colorDate = (_timestamp, values) => {\n let now = moment().unix();\n let color = \"inherit\";\n if (_timestamp > now) {\n // future\n color = \"futureColor\";\n } else {\n // within the last two months\n if ((now - _timestamp) < 5274000) {\n // within the last two months\n color = \"returnedColor\";\n }\n }\n if (values.highlight) {\n return color;\n }\n return color;\n }\n\n function colorOHOO(highlight) {\n let colour = \"inherit\"\n if (highlight) {\n return colour;\n }\n return peerColor;\n }\n\n const noCover = (e) => {\n\n e.target.src = nocover;\n e.target.onerror = null;\n }\n\n const columns = [\n\n {\n title: <div style={{ \"paddingLeft\": \"2px\" }}><small>ISBN</small></div>, dataIndex: 'isbn', key: 'isbn', render: (e) => {\n return (<div style={{ \"width\": \"93px\", \"textAlign\": \"center\", \"paddingLeft\": \"2px\" }} className='overhide'>{e}</div>)\n }\n },\n {\n title: <small>Title</small>, dataIndex: 'title', key: 'title', render: (e, f) => {\n return <div className='overhide' style={{ \"width\": \"190px\" }} ><a style={{ \"cursor\": \"pointer\" }} onClick={() => expandCell(f)}>{e}{(f.subtitle) ? \" : \" + f.subtitle : \"\"}</a></div>\n }\n },\n {\n title: <small>Author</small>, style: { \"overflow\": \"hidden\" }, dataIndex: 'authors', key: 'authors', render: (e) => {\n return <div style={{ \"width\": \"95px\" }} className='overhide'>{e.map(item => item.name).join(\",\")}</div>\n }\n },\n {\n title: <small>Bd</small>, dataIndex: 'binding_code', key: 'binding_code', render: (e) => {\n return <div style={{ \"width\": \"30px\" }} className='overhide'>{e}</div>\n }\n },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e, f) => {\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"width\": \"50px\", \"fontWeight\": \"normal\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\", \"color\": (item.code) ? bestsellerColor : \"normal\" }}>{(item.row_price > 0) ? \"$\" + item.row_price : \"\"} </div>\n })}\n {/* <div> </div> */}\n </>\n );\n }\n },\n {\n title: <small>PubDate</small>, dataIndex: 'release_date', key: 'release_date', render: (e, f) => {\n return <div style={{ \"width\": \"65px\" }} className='overhide'><nobr><span className={colorDate(e, f)}>{moment(e * 1000).format(\"MMMD-YY\")}</span></nobr></div>;\n }\n },\n {\n title: <small>Series</small>, dataIndex: 'series', key: 'series', render: (e) => {\n return (<div style={{ \"width\": \"40px\" }} className='overhide'>{e}</div>)\n }\n },\n {\n title: <small>#</small>, dataIndex: 'series_num', key: 'series_num', render: (e) => {\n return (<div style={{ \"width\": \"15px\" }} className='overhide'>{e}</div>)\n }\n },\n {\n title: <small>Subjects</small>, dataIndex: 'subjects', key: 'subjects', render: (e) => {\n return (\n <div style={{ \"width\": \"90px\" }} className='overhide'>\n <span>\n {parseSubjectsWeird(e, 15)}\n </span>\n </div>\n );\n }\n },\n {\n title: <small>Publisher</small>, dataIndex: 'publisher', key: 'publisher', render: (e) => {\n return (<div style={{ \"width\": \"90px\" }} className='overhide'>{e}</div>)\n }\n },\n {\n title: <small>Edition</small>, dataIndex: 'edition', key: 'edition', render: (e) => {\n return (<div style={{ \"width\": \"60px\" }} className='overhide'>{e}</div>)\n }\n },\n {\n title: <small>Rank</small>, dataIndex: 'rank', key: 'rank', render: (e, f) => {\n return (<div style={{ \"textAlign\": \"right\", \"width\": \"30px\" }} className='overhide'><TitleRank highlight={f.highlight} number_only rank={e} /></div>);\n }\n },\n {\n title: <small>Cart</small>, dataIndex: 'cart', key: 'cart', render: (e, f) => {\n return (\n <div style={{ \"textAlign\": \"right\", \"width\": \"75px\" }} className='overhide'>\n <Overlay width={750} component={<TestOrderBox wrap data={f} isbn={f.isbn} />}>{drawQuantity(f.isbn, session.cart)}</Overlay>\n </div>\n )\n }\n },\n {\n title: <small>OH/OO</small>, dataIndex: 'onhand', key: 'onhand', render: (e, f) => {\n return (\n <div style={{ \"width\": \"70px\" }} className='overhide'>\n <Space size={0}>\n <div>\n {f.available.map(item => {\n return <div style={{ \"backgroundColor\": successColor, \"minWidth\": \"35px\", \"borderRadius\": \"2px 0px 0px 2px\", \"textAlign\": \"center\", \"color\": \"#fff\", \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\", \"margin\": \"0px\", \"marginBottom\": \"2px\" }}>{item.onhand || \"\"} </div>\n })}\n {getPeerFromSales(f.conditions, true, f.highlight)}\n </div>\n <div>\n {f.available.map(item => {\n return <div style={{ \"backgroundColor\": warningColor, \"minWidth\": \"35px\", \"borderRadius\": \"0px 2px 2px 0px\", \"textAlign\": \"center\", \"color\": \"#fff\", \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\", \"margin\": \"0px\", \"marginBottom\": \"2px\" }}>{item.onorder || \"\"} </div>\n })}\n {getPeerFromSales(f.conditions, false, f.highlight)}\n </div>\n </Space>\n </div>\n );\n }\n },\n\n\n ]\n if (canSequence()) {\n columns.unshift({\n title: <small>#</small>, align: \"center\", className: 'cellBorder', dataIndex: 'eisbn', key: 'eisbn', render: (e, f, g) => {\n return (\n <div style={{ \"width\": \"20px\" }} className='overhide'>\n <div style={{ \"marginLeft\": \"12px\", \"paddingTop\": \"-2px\" }}>\n <Bookmark index={0} searchFilters={searchFilters} isbn={f.isbn} list_id={(searchFilters.hasOwnProperty(\"x\") ? searchFilters.x : \"\")} /></div>\n <div>\n <small>{f.sequence_num}</small>\n </div>\n </div>\n );\n }\n })\n }\n\n if (session.chosen_supplier) {\n\n columns.splice(1, 0, {\n title: <small>%</small>, className: \"cellBorder\", dataIndex: 'discount', key: 'discount', render: (e, f) => {\n return (\n <div style={{ \"width\": \"30px\" }} className='overhide'>\n <span className=\"c\">{(f.hasOwnProperty(\"supplier_info\")) ? f.supplier_info.discount : \"\"}</span>\n </div>\n );\n }\n })\n\n columns.splice(1, 0, {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e, f) => {\n return (\n <div style={{ \"width\": \"55px\" }} className='overhide'>\n <span className=\"c\">{(f.hasOwnProperty(\"supplier_info\") && f.supplier_info.price) ? \"$\" + f.supplier_info.price : \"\"}</span>\n </div>\n );\n }\n })\n\n columns.splice(1, 0, {\n title: <small>OO</small>, dataIndex: 'oo', key: 'oo', render: (e, f) => {\n return (\n <div style={{ \"width\": \"25px\" }} className='overhide'>\n <span className=\"c\">{(f.hasOwnProperty(\"supplier_info\")) ? f.supplier_info.onorder : \"\"}</span>\n </div>\n );\n }\n })\n\n columns.splice(1, 0, {\n title: <small>OH</small>, dataIndex: 'oh', key: 'oh', render: (e, f) => {\n return\n (\n <div style={{ \"width\": \"30px\" }} className='overhide'>\n <nobr><span className=\"c\">{(f.hasOwnProperty(\"supplier_info\")) ? f.supplier_info.onhand : \"\"}</span></nobr>\n </div>\n )\n }\n })\n } else {\n columns.push(\n {\n title: <small>History</small>, width: \"150px\", dataIndex: 'sales', key: 'sales', render: (e, f) => {\n return (<SalesSummary conditions={f.conditions} highlight={f.highlight} />)\n }\n }\n )\n }\n\n const getPeerFromSales = (_sales, _ohhand = true, highlight = false) => {\n if (_sales.length > 0 && _sales[0].hasOwnProperty(\"peer\")) {\n if (_ohhand) {\n return <small className=\"rowRawData\" style={{ \"whiteSpace\": \"nowrap\" }}>{_sales[0].peer.onhand || \"\"}<sup> {_sales[0].peer.onhandlocs || \"\"} </sup> </small>;\n } else {\n return <small className=\"rowRawData\" style={{ \"whiteSpace\": \"nowrap\" }}>{_sales[0].peer.onorder || \"\"}<sup> {_sales[0].peer.onorderlocs || \"\"}</sup> </small>;\n }\n }\n\n return (<></>);\n\n }\n\n const drawChildTable = (_record) => {\n return (\n <>\n <div className=\"hideHover\" style={{ \"marginTop\": \"-3px\", \"marginLeft\": \"-3px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <div className='shim' /><div className='shim' /><div className='shim' />\n <Renderer close={false}><ItemLayouts cart_update data={_record} display=\"details2\" /></Renderer>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </>\n )\n }\n\n const expandCell = (_data, _type) => {\n if (!expanded.includes(_data.eisbn)) {\n setExpanded([_data.eisbn]);\n } else {\n setExpanded([]);\n }\n }\n\n const routePathToAnalytics = () => {\n window.open(\"/reports/analytics/filter/v/\" + toUriHash(objectToPath(searchFilters).replace(\"/filter\", \"\")), \"_blank\")\n }\n\n const displayGroup = () => {\n return (\n <div style={{ \"marginTop\": \"-7px\" }}>\n <Space>\n <Radio.Group size=\"small\" value={display} onChange={(e) => {\n Cookies.set(\"browse_show_list\", e.target.value);\n if (searchFilters.x != null) {\n getBrowse();\n }\n setDisplay(e.target.value)\n }}>\n {/* <Radio.Button value={false}><UnorderedListOutlined /></Radio.Button>\n <Radio.Button value={true}><PicCenterOutlined /></Radio.Button> */}\n <Radio.Button value={\"details2\"}><small><PicLeftOutlined /></small></Radio.Button>\n <Radio.Button value={\"list\"}><small><MenuOutlined /></small></Radio.Button>\n <Radio.Button value={\"cards\"}><small><AppstoreOutlined /></small></Radio.Button>\n <Radio.Button value={\"calendar\"}>\n <Tooltip title={<small>Compare previous edition side-by-side. <br />(Best for calendar purchasing)</small>}><small><CalendarOutlined /></small></Tooltip>\n </Radio.Button>\n </Radio.Group>\n\n </Space>\n </div>\n\n )\n }\n\n // const getTerm = () => {\n // if (history.location.pathname.includes(\"/t/\")) {\n\n // let _arr = history.location.pathname.split(\"/t/\");\n // if (_arr.length > 1) {\n // let _spt = _arr[1].split(\"/\");\n // if (_spt.length > 0) {\n // return _spt[0];\n // } else {\n // return _arr[1];\n // }\n // }\n\n // } else {\n // return \"\";\n // }\n // }\n\n const [form] = Form.useForm();\n\n\n const SearchWithin = () => {\n\n\n const [val, setVal] = useState((searchFilters.hasOwnProperty(\"t\") ? searchFilters.t : \"\"));\n\n useEffect(() => {\n setVal(searchFilters.t)\n }, [searchFilters.t])\n return (\n <Form.Item noStyle initialValue={(searchFilters.hasOwnProperty(\"t\") ? searchFilters.t : \"\")} label={<small>Find a list</small>}>\n <Input.Search size=\"small\" onChange={(e) => setVal(e.target.value)} onSearch={(e, f) => {\n setVal(e);\n if (!e && f.type !== \"click\" && f.type !== \"keydown\") {\n return;\n }\n e = handleTermSlash(e, true)\n let sf = { ...searchFilters, \"t\": e, \"o\": 0 }\n setSearchFilters(sf);\n getBrowse(false, sf);\n setCurrent(1);\n history.push({ pathname: path + objectToPath(sf) });\n }} allowClear value={val} enterButton placeholder=\"Search within...\" style={{ \"width\": \"324px\" }} />\n </Form.Item>\n\n )\n\n\n }\n\n const drawFilters = () => {\n\n return (\n <div className=\"layoutHeader\" style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"10px 20px\", \"paddingTop\": \"0px\" }}>\n <Form form={form} layout=\"vertical\">\n <div className=\"float-flex\">\n <Space wrap size={[5, 0]}>\n <SearchWithin />\n <conditional.true value={(display === \"list\")}>\n <Form.Item noStyle label={<small>Pubstock</small>}>\n <Tooltip title={\"Choose a supplier to add their availability to the list of titles below\"}>\n <Select showSearch size=\"small\" onChange={(e) => setSupplier(e)} value={session.chosen_supplier} style={{ width: 95 }}>\n <Select.Option value=\"\"><small style={{ \"color\": \"#bbb\" }}>Pubstock...</small></Select.Option>\n {window.sitesettings.suppliers.map(item => {\n return <Select.Option key={item} value={item}><small>{item}</small></Select.Option>\n })}\n </Select>\n </Tooltip>\n </Form.Item>\n </conditional.true>\n\n <conditional.true value={(display !== \"list\")}>\n <Form.Item noStyle label={<small>Always show</small>}>\n <div className=\"ant-radio-group-solid ant-radio-group-small\">\n <Radio.Button size=\"small\" style={{ \"padding\": \"0px 12px\" }} onClick={(e) => setPrefs({ ...prefs, \"bm_notes\": !prefs.bm_notes })} checked={prefs.bm_notes} buttonStyle=\"solid\"><small>{(!prefs.bm_notes) ? <PushpinOutlined /> : <PushpinFilled />}  BM Data</small></Radio.Button>\n </div>\n </Form.Item>\n </conditional.true>\n\n <Form.Item noStyle label={<small>ISBNs</small>}>\n <CopyISBNs searchFilters={searchFilters} />\n </Form.Item>\n <Tooltip title={<small>View results in Analytics</small>}><Button onClick={() => routePathToAnalytics()} type=\"primary\" size=\"small\"><small><SelectOutlined style={{ \"transform\": \"scaleX(-1)\", \"fontSize\": \"10px\" }} /> View Analytics</small></Button></Tooltip>\n <Refine path={path} getBrowse={getBrowse} searchFilters={searchFilters} setSearchFilters={setSearchFilters} />\n </Space>\n\n <div>\n <Space>\n <div><small>Sort:</small></div>\n <Form.Item noStyle label={<small>Sort</small>}>\n <Select value={(searchFilters.v) ? searchFilters.v : \"\"} size=\"small\" onChange={(e) => {\n let _f = { ...searchFilters, \"v\": e }\n\n // Set default sort if not sequence\n if (e !== \"sequence\") {\n Cookies.set(\"default_search_sort\", e);\n }\n\n\n setSearchFilters(_f);\n getBrowse(false, _f);\n history.push({ pathname: path + objectToPath(_f) })\n }} style={{ width: 110 }}>\n {((searchFilters.hasOwnProperty(\"x\") && (searchFilters)) && <Select.Option key=\"sequence\" value=\"sequence\"><small>List Order</small></Select.Option>)}\n <Select.Option key=\"popularity\" value=\"\"><small>Popularity</small></Select.Option>\n <Select.Option key=\"instore\" value=\"in_store\"><small>In Store</small></Select.Option>\n <Select.Option key=\"date\" value=\"date\" ><small>Date</small></Select.Option>\n <Select.Option key=\"title\" value=\"title\" ><small>Title</small></Select.Option>\n <Select.Option key=\"author\" value=\"author\" ><small>Author</small></Select.Option>\n {((searchFilters.v && searchFilters.v.substring(0, 7) === \"related\") && <Select.Option key={searchFilters.v} value={searchFilters.v} ><small>Related</small></Select.Option>)}\n </Select>\n </Form.Item>\n </Space>\n </div>\n\n </div>\n </Form>\n </div>\n )\n }\n\n\n function rowClasses(record, index) {\n if (record.highlight) {\n return \"rowHighlightHover defaultCursor highlightRow\"\n }\n return \"rowHover defaultCursor\"\n }\n\n function drawListTable() {\n return (\n\n <div style={{ \"margin\": \"0 -20px\" }}>\n {/* <Spin style={{ \"minHeight\": \"calc(100vh - 470px)\" }} spinning={loading}> */}\n {(!loading &&\n <Table\n size=\"small\"\n pagination={false}\n columns={columns}\n rowKey={\"eisbn\"}\n rowClassName={(record, index) => rowClasses(record, index)}\n className=\"fullTable\"\n dataSource={results.rows}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n )}\n {/* </Spin> */}\n </div>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\" style={{ \"minHeight\": \"500px\" }}>\n <Layout.Content className=\"layoutHeader\" style={{ \"padding\": \"0px\" }} >\n <div style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"20px 20px 0px 20px\" }}>\n <div style={{ \"float\": \"right\" }}>{displayGroup()}</div>\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>{getHeader()}</div>\n </Typography.Title>\n <div className=\"shim\" />\n <Divider dashed style={{ \"margin\": \"0px 0px\" }} />\n </div>\n {(initLoaded && <>\n <BrowseFilters5 context={(results[\"context\"]) || { name: \"\" }} setToolboxes={setToolboxes} display_mode={display} block setTitle={setTitle} listLabel={listLabel} loading={loading} getBrowse={getBrowse} toolboxes={results.toolboxes} path={path} setCurrent={setCurrent} filters={filters} setFilters={setFilters} searchFilters={searchFilters} setSearchFilters={setSearchFilters} />\n <div className=\"trans\" style={{ \"opacity\": (loading) ? \"0.5\" : 1 }}> {drawFilters()} </div>\n </>)}\n {/* \n {(!loading && <>\n <BrowseFilters5 getBrowse={getBrowse} toolboxes={results.toolboxes} path={path} display={displayGroup()} setCurrent={setCurrent} filters={filters} searchFilters={searchFilters} setSearchFilters={setSearchFilters} />\n {drawFilters()}\n </>)} */}\n <Paginate\n save={\"browse_limit\"}\n loading={loading}\n paginate={{\n current: current,\n offset: (searchFilters.hasOwnProperty(\"o\")) ? searchFilters.o : 0, pagesize: (searchFilters.hasOwnProperty(\"l\")) ? searchFilters.l : 20\n }}\n setPaginate={(e) => {\n setCurrent(e.current);\n let sf = { ...searchFilters, \"o\": e.offset, \"l\": e.pagesize }\n setSearchFilters(sf);\n getBrowse(false, sf);\n history.push({ pathname: path + objectToPath(sf) });\n }} count={results.row_count} />\n <Spin style={{ \"minHeight\": \"calc(100vh - 470px)\" }} spinning={loading}>\n <div className=\"bcg2\" style={{ \"padding\": \"0px 20px\", \"minHeight\": \"calc(100vh - 440px)\" }}>\n <conditional.true value={(display === \"calendar\")}>\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"space-around\" }}>\n <div>\n <small>Current Edition</small>\n </div>\n <div>\n <small>Previous Edition</small>\n </div>\n </div>\n <Divider style={{ \"margin\": \"0px\" }} />\n </conditional.true>\n <conditional.true key={\"list\"} value={(display === \"list\")}>\n {drawListTable()}\n </conditional.true>\n <conditional.true key={\"notlist\"} value={(display !== \"list\")}>\n <br />\n {/* Split into chunks so renderer can draw placeholder */}\n {/* The card/grid view of the ISBNs */}\n <conditional.true key={\"cards\"} value={(display === \"cards\")}>\n <div>\n {results.rows.reduce((all, one, i) => {\n const ch = Math.floor(i / 5);\n all[ch] = [].concat((all[ch] || []), one);\n return all\n }, []).map((item, index) => {\n return <div key={item[0].isbn + \"cards\"}>\n <Bookmark index={index} searchFilters={searchFilters} isbn={item[0].isbn} list_id={(searchFilters.hasOwnProperty(\"x\") ? searchFilters.x : \"\")} />\n <Renderer>\n <ItemLayouts data={item} index={index} display={display} />\n </Renderer>\n <Divider dashed />\n </div>\n })}\n </div>\n </conditional.true>\n {/* The Details view of the ISBNs */}\n <conditional.true key={\"notcards\"} value={(display !== \"cards\")}>\n <div>\n {results.rows.map((item, index) => {\n return <div key={item.eisbn + \"notcards\"}>\n <Bookmark index={index} searchFilters={searchFilters} isbn={item.isbn} list_id={(searchFilters.hasOwnProperty(\"x\") ? searchFilters.x : \"\")} />\n {/* <LazyLoad offset={500} once={true} height={360}>\n <div key={item.eisbn + \"ll\"}>\n {(canSequence() &&\n <div className=\"shim\" style={{ \"margin\": \"25px -20px\", \"marginTop\": \"0px\" }}>\n <Divider style={{ \"marginTop\": \"0px\" }} orientation=\"left\" plain><small className=\"c\" style={{ \"fontWeight\": \"600\" }}>#{(item.sequence_num)}</small></Divider>\n </div>\n )}\n <Renderer close={false}>\n <ItemLayouts data={item} display={display} />\n </Renderer>\n <div className=\"borderBottom shim\" style={{ \"margin\": \"35px -20px\", \"borderBottomWidth\": \"6px\" }} />\n </div>\n </LazyLoad> */}\n <LazyLoad offset={500} once={true} height={360}>\n <div key={item.eisbn + \"ll\"}>\n <Renderer close={false}>\n <ItemLayouts\n data={item}\n display={display}\n contextValues={results.context}\n />\n </Renderer>\n </div>\n <div className=\"borderBottom shim\" style={{ \"margin\": \"35px -20px\", \"borderBottomWidth\": \"6px\" }} />\n </LazyLoad>\n </div>\n })}\n </div>\n </conditional.true>\n </conditional.true>\n </div>\n </Spin>\n <Divider className=\"bc\" style={{ \"margin\": \"0\" }} />\n <Paginate\n save={\"browse_limit\"}\n loading={loading}\n paginate={{\n current: current,\n offset: (searchFilters.hasOwnProperty(\"o\")) ? searchFilters.o : 0,\n pagesize: (searchFilters.hasOwnProperty(\"l\")) ? searchFilters.l : 20\n }}\n setPaginate={(e) => {\n setCurrent(e.current);\n let sf = { ...searchFilters, \"o\": e.offset, \"l\": e.pagesize }\n setSearchFilters(sf);\n getBrowse(false, sf);\n history.push({ pathname: path + objectToPath(sf) });\n }}\n count={results.row_count}\n />\n </Layout.Content>\n </Layout>\n </>\n )\n}\n\n\n\n","import React from \"react\";\n\nexport default function BusinessDirectoryHelp() {\n\n return (<></>)\n\n\n // return(\n // <div style={{\"maxHeight\" : \"500px\", \"overflow\" : \"auto\"}}>\n \n // <p className=\"content\">\n // <a name=\"Top\"></a>\n // </p><ol>\n // <li><a href=\"#Search\">Searching</a>\n // <ol style={{\"listStyleType\" : \"upper-alpha\"}}>\n // <li><a href=\"#Search_Textfield\">Textfield Input</a></li>\n // <li><a href=\"#Search_Webstores\">Webstores Checkbox</a></li>\n // <li><a href=\"#Search_Pubstock\">Pubstock Checkbox</a></li>\n // <li><a href=\"#Search_Menus\">Scrollable Menus</a>\n // <ol style={{\"listStyleType\": \"upper-roman\"}}>\n // <li><a href=\"#Search_Menus_Category\">Category</a></li>\n // <li><a href=\"#Search_Menus_Specialty\">Specialty</a></li>\n // <li><a href=\"#Search_Menus_City\">City</a></li>\n // <li><a href=\"#Search_Menus_Prov\">Prov/State</a></li>\n // <li><a href=\"#Search_Menus_Country\">Country</a></li>\n // </ol>\n // </li>\n // </ol>\n // </li>\n // <li><a href=\"#Browse\">Browsing</a></li>\n // <li><a href=\"#View\">Viewing</a></li>\n // <li><a href=\"#Edit\">Editing</a>\n // <ol style={{\"listStyleType\" : \"upper-alpha\"}}>\n // <li><a href=\"#Edit_Add\">Adding Your Company</a>\n // <ol style={{\"listStyleType\": \"upper-roman\"}}>\n // <li><a href=\"#Edit_Add_Create\">Creating an Account</a></li>\n // <li><a href=\"#Edit_Add_List\">Listing Your Company</a></li>\n // </ol>\n // </li>\n // <li><a href=\"#Edit_Info_Change\">Changing Contact Info</a></li>\n // <li><a href=\"#Edit_Info_Images\">Uploading Images/Logo</a></li>\n // <li><a href=\"#Edit_Info_Category\">Selecting Categories</a></li>\n // <li><a href=\"#Edit_Info_Specialty\">Selecting Specialties</a></li>\n // <li><a href=\"#Edit_Remove\">Removing Your Company</a></li>\n // </ol>\n // </li>\n // </ol> \n\n // <hr />\n // <p></p>\n // <p class=\"content\">\n // <a name=\"Search\"></a>\n // <b>Searching</b>\n // <br />\n // The TBM Bookmanager Book Business Directory is an advanced utility to search for businesses in the book industry.\n // This utility is absolutely free to browse, and free to list your company in!\n // <br />\n // <br />\n // In order to add your company you must have registered an account with TBM Bookmanager.\n // Once you have signed up an account you must then list your company and enter in all of the required information for the directory.\n // <br />\n // <br />\n // Your information will not be visible to the public until it has been approved by TBM Bookmanager staff.\n // Once your info has been approved you will be listed in our directory for everyone to find.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Textfield\"></a>\n // <b>Searching by Textfield Input</b>\n // <br />\n // At the top of the Business Directory page is a simple textfield input for searching.\n // Here you may type in anything (company name, category, specialty, city, province/state, country) to search by.\n // <br />\n // <br />\n // The search engine will try to match up your search query with the best available results.\n // If you misspell a word the engine will try to match similar results, but may not always return exactly what you searched for.\n // <br />\n // <br />\n // A better and more specific way to search would be to use the advanced scrollable menus.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Webstores\"></a>\n // <b>Searching for Webstores</b>\n // <br />\n // At the top of the Business Directory page, next to the textfield search, you will see a checkbox labeled \"is Webstore\".\n // If you check this box, it will return only the stores that have webstores with TBM Bookmanager.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Pubstock\"></a>\n // <b>Searching Pubstock</b>\n // <br />\n // At the top of the Business Directory page, next to the textfield search and the Webstore checkbox, you will see another checkbox labeled \"on Pubstock\".\n // If you check this box, it will return only the businesses that provide their stock data to the Pubstock service at TBM Bookmanager.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Menus\"></a>\n // <b>Searching by Scrollable Menus</b>\n // <br />\n // Below the search textfield you will see 5 scrollable menus (Category, Specialty, City, Prov/State, Country).\n // By clicking on any of the values in these menus, you will narrow your search based on the criteria selected.\n // You may select an item in any or every menu.\n // <br />\n // <br />\n // When you select an item in a menu, you will see the number next to each item change.\n // This number is the total count of businesses in the directory that are associated with that menu item.\n // When you select multiple menu items, you will see that number drop drastically as your search is narrowed down.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Menus_Category\"></a>\n // <b>Searching by Category</b>\n // <br />\n // The category field defines what a business is.\n // Some of the most common categories are <i>Bookstore</i>, <i>Publisher</i>, <i>Wholesaler</i> and <i>Distributor</i>.\n // The list of categories will continue to expand as more businesses are listed in the directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Menus_Specialty\"></a>\n // <b>Searching by Specialty</b>\n // <br />\n // The specialty field explicitly defines a division (specialty) of a category.\n // Many categories may share a similar specialty (ie a <i>Bookstore</i> can be <i>General</i> or <i>Mystery</i>, and a <i>Publisher</i> can be <i>General</i> or <i>Mystery</i>).\n // You do not need to have a category selected to choose a specialty, however it makes your search results more specific if you choose an item from both menus.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Menus_City\"></a>\n // <b>Searching by City</b>\n // <br />\n // You may search for a business by city.\n // Only cities with businesses listed in the directory will be available to search by.\n // If your city is not listed in the directory, then no business from your city has enrolled in the directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Menus_Prov\"></a>\n // <b>Searching by Province/State</b>\n // <br />\n // You may search for a business by province or state.\n // Only provinces or states with businesses listed in the directory will be available to search by.\n // If your province or state is not listed in the directory, then no business from that province or state has enrolled in the directory.\n // <br />\n // <br />\n // Because not all countries have provinces or states, TBM Bookmanager staff have tried to make all entries in the directory as comprehensible as possible.\n // Therefor in a country that has no provinces or states, but instead has geopolitical regions, territories or other, TBM Bookmanager has elected to use those in this field.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Search_Menus_Country\"></a>\n // <b>Searching by Country</b>\n // <br />\n // You may search for a business by country.\n // Only countries with businesses listed in the directory will be available to search by.\n // If your country is not listed in the directory, then no business from that country has enrolled in the directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Browse\"></a>\n // <b>Browsing the Book Business Directory</b>\n // <br />\n // Once you have performed a search, or narrowed your choices in the scrollable menus, you will be presented with a list of bookstores below the scrollable menus.\n // <br />\n // <br />\n // The default number of companies displayed per page is 25. You can traverse through pages using the pagination drop-down, or the \"Prev. page\" and \"Next page\" links.\n // <br />\n // <br />\n // To view a company's information just click on a company name.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"View\"></a>\n // <b>Viewing a Company's Information</b>\n // <br />\n // When you click on a company name in the Book Business Directory, you will see an inner tab open within the list of company names.\n // This inner tab actually pushes all content below it down, therefor keeping everything visible on-screen. You may open as many company tabs as you wish.\n // <br />\n // <br />\n // Inside of the company tab the company logo (if available) is displayed at the top, with their website, email and webstore (if available) displayed on the right of the logo.\n // The company's contact information is listed in the left column under the logo, and a description of the company (if available) is shown in the main part of the tab.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit\"></a>\n // <b>Editing Your Company's Information</b>\n // <br />\n // After you have successfully signed up for an account and listed your company in the directory, you may want to correct or update some of your information.\n // You must be logged in to your company's account in order to edit your information. When you are logged in, you will see 2 buttons above the search textfield:\n // <br />\n // <br />\n // <i><b><u>VIEW MY COMPANY</u></b></i>\n // <br />\n // Pressing this button will automatically display your company's contact information as anyone in the directory would see it.\n // From this page you can press the \"Edit\" button at the bottom-left corner to display the edit page.\n // <br />\n // <br />\n // <i><b><u>EDIT MY COMPANY</u></b></i>\n // <br />\n // Pressing this button will automatically display the inner tab where you can update your company's information.\n // <br />\n // <br />\n // Please note, any changes made to your account will require an approval from TBM Bookmanager.\n // You will be able to see your own changes to your company when you are logged in, however those changes will not be available to the public.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Add\"></a>\n // <b>Adding Your Company</b>\n // <br />\n // To add your company to the Book Business Directory, you must first create an account with TBM Bookmanager.\n // Once you have created an account you must then list your company in the directory.\n // Once you have listed your company, it must be approved by TBM Bookmanager before it is displayed in the directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Add_Create\"></a>\n // <b>Creating an Account</b>\n // <br />\n // To create an account you must signup with a valid email address, a company name and a password.\n // After submitting your request to signup you will receive an activation email to the address you provided.\n // You must visit the activation url in order to be allowed to login to the TBM Bookmanager website.\n // Once activated and logged in, you may then list your company in the Book Business Directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Add_List\"></a>\n // <b>Listing Your Company</b>\n // <br />\n // After you have successfully created an account with TBM Bookmanager, you must list your company in the Book Business Directory.\n // Go to the directory page and click on the \"LIST MY COMPANY\" button at the top of the page.\n // You will be presented with a pop-up window where you will be able to enter in all of your company's information.\n // When you are done, simply press the \"Save Changes\" button.\n // <br />\n // <br />\n // Please note, any changes made to your account will requre an approval from TBM Bookmanager.\n // You will be able to see your own changes to your company when you are logged in, however those changes will not be available to the public.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Info_Change\"></a>\n // <b>Changing Contact Info</b>\n // <br />\n // When you arrive at the Edit tab, you will notice the same screen that you used to list your company when you first signed up, only the screen is embedded in the page.\n // Make you changes to any of the fields that you want. If you delete the value of a field previously filled, it will delete that field from your information.\n // <br />\n // <br />\n // All fields marked in red are mandatory, please fill them appropriately. If you have not entered valid data into a field, you will receive a warning when you save your changes.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Info_Images\"></a>\n // <b>Uploading Images/Logo</b>\n // <br />\n // You are able to upload a company logo and a store image if you so wish.\n // Simply click on the Edit/Upload Images button. You will be presented with a popup window (please be aware some popup blockers may prevent this, adjust your settings to allow).\n // <br />\n // <br />\n // In the popup window you may select a file (only valid image files less than 150kb please) and define whether it is your logo or store image.\n // The logo image is displayed at the top of your contact information, and your store image is displayed in the top-right corner of your store description area.\n // <br />\n // <br />\n // You are able to view the images within the popup window and delete them if you are not happy with them.\n // Please note, any changes to images will also need to be approved by TBM Bookmanager.\n // Those images will not be visible to the public until they have been approved.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Info_Category\"></a>\n // <b>Selecting a Category</b>\n // <br />\n // In order for your company to be listed in the Book Business Directory, you must select at least 1 category/specialty.\n // This category defines the nature of your company's business. Simply click the \"Add Another Specialty\" button to select your first (and next 2 if you wish) category.\n // <br />\n // <br />\n // You are allowed a <b>maximum of 3</b> categories. You may select any of the categories in the drop-down menus.\n // You may also define your own custom category by typing it in to the textfield that rests above the drop-down menu.\n // Please note, all new categories are invisible to the public until explicitly approved by TBM Bookmanager staff.\n // <br />\n // <br />\n // Please note, if you do not select a category, your company WILL NOT be listed in the Book Business Directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Info_Specialty\"></a>\n // <b>Selecting a Specialty</b>\n // <br />\n // In order for your company to be listed in the Book Business Directory, you must select at least 1 category/specialty.\n // This specialty will describe a specific division of the category that you have selected.\n // For most companies, the \"General\" specialty is most appropriate unless they are targeting a very specific market of the book industry.\n // <br />\n // <br />\n // You are allow a <b>maximum of 3</b> specialties. You may select any of the specialties in the drop-down menus.\n // You may also define your own custom specialty by typing it in to the textfield that rests above the drop-down menu.\n // Please note, all new specialties are invisible to the public until explicitly approved by TBM Bookmanager staff.\n // <br />\n // <br />\n // Please note, if you do not select a specialty, your company WILL NOT be listed in the Book Business Directory.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // <hr style={{backgroundColor : \"#ccc\"}} />\n // <p class=\"content\">\n // <a name=\"Edit_Remove\"></a>\n // <b>Removing Your Company</b>\n // <br />\n // To remove your company from the Book Business Directory, open up the tab to edit your company's information.\n // DELETE ALL OF THE CATEGORIES/SPECIALTIES. When you do not belong to any category or specialty, your company will not be listed in the Book Business Directory.\n // <br />\n // <br />\n // Your company's information will still be stored in your account, however it will not be displayed to the public.\n // If you want to relist your company again in the future, simply click the \"LIST MY COMPANY\" button from the Book Business Directory page.\n // Follow the steps to list your company as you did in the first place.\n // </p>\n // <p class=\"content\">\n // [<a href=\"#Top\">Return to Help Menu</a>] [<a href=\"javascript: window.close();\">Close this window</a>]\n // </p>\n // {/* <div id=\"popupdiv\" style=\"z-index:1000; visibility: hidden; position: absolute; border-style: solid; border-width: 3px; border-color: #698da7; background-color: white; padding: 6px;\"></div>\n // <div id=\"popupdiv2\" style=\"z-index:1000; visibility: hidden; position: absolute; border-style: solid; border-width: 1px; border-color: #6f6f6f; background-color: white; padding: 6px;\"></div>\n // <div id=\"popupdiv_edit\" style=\"z-index:10; visibility: hidden; position: absolute; border-style: solid; border-width: 3px; border-color: #698da7; background-color: white; padding: 6px;\"></div>\n // <div id=\"tooltip\" style=\"z-index:1000; visibility: hidden; position: absolute; border-style: solid; border-width: 1px; border-color: #6f6f6f; color: #c5c5c5; background-color: #1190bc; padding: 6px;\"></div> */}\n\n\n\n\n // </div>\n // )\n\n // return (\n // <>\n\n // <p className=\"title\">Book Business Directory - Help</p>\n // <p className=\"content\">\n // <a name=\"Top\"></a>\n // </p><ol>\n // <li><a href=\"#Search\">Searching</a>\n // <ol style={{\"listStyleType\" : \"upper-alpha\"}}>\n // <li><a href=\"#Search_Textfield\">Textfield Input</a></li>\n // <li><a href=\"#Search_Webstores\">Webstores Checkbox</a></li>\n // <li><a href=\"#Search_Pubstock\">Pubstock Checkbox</a></li>\n // <li><a href=\"#Search_Menus\">Scrollable Menus</a>\n // <ol style={{\"listStyleType\": \"upper-roman\"}}>\n // <li><a href=\"#Search_Menus_Category\">Category</a></li>\n // <li><a href=\"#Search_Menus_Specialty\">Specialty</a></li>\n // <li><a href=\"#Search_Menus_City\">City</a></li>\n // <li><a href=\"#Search_Menus_Prov\">Prov/State</a></li>\n // <li><a href=\"#Search_Menus_Country\">Country</a></li>\n // </ol>\n // </li>\n // </ol>\n // </li>\n // <li><a href=\"#Browse\">Browsing</a></li>\n // <li><a href=\"#View\">Viewing</a></li>\n // <li><a href=\"#Edit\">Editing</a>\n // <ol style={{\"listStyleType\" : \"upper-alpha\"}}>\n // <li><a href=\"#Edit_Add\">Adding Your Company</a>\n // <ol style={{\"listStyleType\": \"upper-roman\"}}>\n // <li><a href=\"#Edit_Add_Create\">Creating an Account</a></li>\n // <li><a href=\"#Edit_Add_List\">Listing Your Company</a></li>\n // </ol>\n // </li>\n // <li><a href=\"#Edit_Info_Change\">Changing Contact Info</a></li>\n // <li><a href=\"#Edit_Info_Images\">Uploading Images/Logo</a></li>\n // <li><a href=\"#Edit_Info_Category\">Selecting Categories</a></li>\n // <li><a href=\"#Edit_Info_Specialty\">Selecting Specialties</a></li>\n // <li><a href=\"#Edit_Remove\">Removing Your Company</a></li>\n // </ol>\n // </li>\n // </ol>\n \n\n // </>\n // )\n}","import React, { useState } from \"react\";\nimport { Form, Layout, Table, Typography, Divider, Input, Button, Row, Col, Pagination, Modal, Space, Collapse, Checkbox, Switch, Card } from \"antd\";\nimport { FilterFilled, FilterOutlined, MenuOutlined, PicCenterOutlined, InfoCircleOutlined } from '@ant-design/icons';\n\n\n\nimport conditional from \"../tools/conditional\";\nimport BusinessDirectoryHelp from \"./misc/BusinessDirectroyHelp\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport Paginate from \"../components/Paginate\";\nexport default function BusinessDirectoryPage(props) {\n\n const [isFiltering, setIsFiltering] = useState(false);\n\n const [results, setResults] = useState({ rows: [], row_count: 0 });\n const [pageSize, setPageSize] = useState(20);\n const [current, setCurrent] = useState(1)\n\n\n const pageChange = () => {\n\n\n }\n\n const [filters, setFilters] = useState({\n term: \"\",\n list: true,\n sort: \"date\",\n show_details: true\n })\n\n const columns = [\n { key: \"blank\", width: \"10px\" },\n { title: <small>Name</small>, dataIndex: 'name', key: 'name' },\n { title: <small>SAN</small>, dataIndex: 'san', key: 'san' },\n { title: <small>City</small>, dataIndex: 'city', key: 'city' },\n { title: <small>Province</small>, dataIndex: 'province', key: 'province' },\n { title: <small>Country</small>, dataIndex: 'country', key: 'country' },\n { title: <small>Category / Specialty</small>, dataIndex: 'category', key: 'category' },\n ]\n\n const data = [\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n },\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n },\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n },\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n },\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n },\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n },\n {\n \"name\": \"Coho Books\",\n \"san\": \"8101078\",\n \"city\": \"Campbell River\",\n \"province\": \"BC\",\n \"country\": \"Canada\",\n \"category\": \"Bookstore / General\"\n }\n ]\n\n\n const catfilters = [\n\n {\n label: \"Categories\",\n data: [\n {\n count: \"596\",\n name: \"Bookstore\"\n },\n {\n count: \"297\",\n name: \"Distributor\"\n },\n {\n count: \"10\",\n name: \"Non-Profit\"\n },\n {\n count: \"64\",\n name: \"Other Retail\"\n },\n {\n count: \"425\",\n name: \"Parent Company\"\n },\n {\n count: \"578\",\n name: \"Publisher\"\n },\n {\n count: \"23\",\n name: \"Sales & Marketing\"\n },\n {\n count: \"67\",\n name: \"Small Press\"\n },\n {\n count: \"66\",\n name: \"Wholesaler\"\n },\n ]\n },\n {\n label: \"Specialty\",\n data: [\n { name: \"Country\", count: \"1\" }\n ]\n },\n {\n label: \"Prov / State\",\n data: [\n { name: \"AB\", count: \"97\" }\n ]\n },\n {\n label: \"City\",\n data: [\n { name: \"Airdrie\", count: \"3\" }\n ]\n },\n {\n label: \"Country\",\n data: [\n { name: \"Canada\", count: \"968\" }\n ]\n },\n ];\n\n\n const drawItems = (_arr) => {\n return _arr.map((item, index) => {\n return (\n <>\n <div key={index} style={{ \"paddingTop\": \"10px\" }} >\n <Checkbox />\n   \n <span>{item.name}</span><span className=\"count\">({item.count})</span>\n </div>\n </>\n )\n })\n\n\n\n }\n const drawPanels = () => {\n\n return catfilters.map((item, index) => {\n return (\n <>\n <Collapse.Panel header={item.label} key={index}>\n {drawItems(item.data)}\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </Collapse.Panel>\n </>\n )\n })\n\n }\n\n const drawPagination = () => {\n\n return (\n <div style={{ \"backgroundColor\": \"#fcfcfc\", \"margin\": \"0px -20px\", \"marginTop\": \"0px\", \"borderBottom\": '1px solid #eee' }}>\n <Row>\n <Col span={12}>\n <div style={{ \"padding\": \"10px 20px\" }}>\n Showing <em style={{ \"fontWeight\": \"500\" }}>1-20 </em> of <em style={{ \"fontWeight\": \"500\" }}>10000</em> results\n </div>\n </Col>\n <Col span={12}>\n <div style={{ \"paddingRight\": \"20px\", \"textAlign\": \"right\" }}>\n <div className=\"shim\" /><div className=\"shim\" />\n <Pagination size=\"small\" current={current} pageSize={pageSize} total={results.row_count} onChange={(_page, _limit) => pageChange(_page, _limit)} />\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </Col>\n </Row>\n </div>\n )\n }\n\n\n return (\n <Layout className=\"layout\">\n <LayoutHeader\n todo\n title=\"Business Directory\"\n filters={\n <Form size=\"small\" layout=\"vertical\">\n <Space>\n <Form.Item label={<><small>Search <InfoCircleOutlined onClick={() => Modal.info({ content: <BusinessDirectoryHelp />, icon: null, title: \"Book Business Directory - Help\" })} style={{ color: 'rgba(0,0,0,.45)' }} /> </small></>} name=\"customer_search\">\n <Input.Search allowClear enterButton=\"Search\" placeholder=\"Search business directory...\" style={{ \"width\": \"400px\" }} />\n </Form.Item>\n <div />\n <Form.Item label={<small>On Pubstock</small>}>\n <Switch size=\"small\" />\n </Form.Item>\n </Space>\n <br clear=\"both\" />\n </Form>\n }\n />\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"0px 20px\" }}>\n <div style={{ \"padding\": \"20px 0px\" }}>\n {/* <Typography.Title level={5}>Employees</Typography.Title> */}\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <Paginate />\n <div style={{ \"margin\": \"0 20px\" }}>\n <div style={{ \"margin\": \"0 -20px\" }}>\n <Table size=\"small\" pagination={false}\n columns={columns}\n dataSource={data}\n />\n </div>\n </div>\n <Paginate />\n </Card>\n </div>\n </div>\n </Layout.Content>\n </Layout>\n\n )\n\n\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Typography, Divider, Button, Layout, Upload, Spin, Table, Form, Space, AutoComplete, Select, message, Input } from \"antd\";\nimport { UploadOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport { useSession } from \"../../utils/Session\";\nimport conditional from \"../../utils/conditional\";\nimport OrderSearchUser from \"../../components/OrderSearchUser\";\n\nexport default function CartImport(props) {\n\n\n const { close = () => { } } = props;\n const [session, setSession] = useSession();\n const [loading, setLoading] = useState();\n const [uploaded, setUploaded] = useState(false);\n const [needsSan, setNeedsSan] = useState(false);\n const [san, setSan] = useState(\"\");\n const [suppliers, setSuppliers] = useState([]);\n const [selectedSupplier, setSelectedSupplier] = useState(\"\");\n const [selectedGroup, setSelectedGroup] = useState(window.sitesettings.stores.findIndex(item => item.is_primary))\n const [file, setFile] = useState({});\n const [results, setResults] = useState({ total_rows: 0, processed_rows: 0, titles: [] });\n\n const uploadFile = (_file, _add) => {\n setFile(_file);\n setLoading(true);\n\n // edifact_san \n\n let obj = {}\n\n obj.file = _file.file;\n obj.add_to_cart = _add;\n\n\n if (san) {\n obj.edifact_san = san;\n } else {\n obj.supplier_acct = selectedSupplier;\n obj.order_group = selectedGroup;\n }\n\n\n apiCall(\"cart/import\", obj, (_status, _result) => {\n if (_status) {\n if (!_add) {\n if (_result.needs_san) {\n setNeedsSan(true);\n }\n setResults(_result);\n setUploaded(true);\n } else {\n if (_result.processed_rows) {\n message.success(_result.processed_rows.toString() + \" Titles added successfully.\");\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n setSession(_result);\n }\n })\n } else {\n message.error(\"No titles added.\");\n }\n close();\n }\n } else {\n message.error(\"There was an error importing.\");\n close();\n }\n setLoading(false);\n });\n }\n\n const fetchSuppliers = () => {\n apiCall(\"cart/getSupplierList\", {}, (_status, _results) => {\n if (_status) {\n\n let _supp = _results.suppliers.map((item, index) => {\n return { value: item.acct }\n })\n setSuppliers(_supp);\n }\n })\n }\n\n useEffect(fetchSuppliers, []);\n\n\n const columns = [\n\n {\n title: <small></small>,\n dataIndex: 'eisbn',\n key: 'eisbn',\n width: 50,\n render: (e) => {\n return <img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"34px\", \"maxWidth\": \"30px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + e} />\n }\n },\n {\n title: <small>ISBN</small>,\n dataIndex: 'isbn',\n key: 'isbn',\n width: 150\n },\n {\n title: <small>Qty</small>,\n dataIndex: 'qty',\n key: 'qty',\n width: 50\n },\n {\n title: <small>Title</small>,\n dataIndex: 'title',\n key: 'title',\n },\n {\n title: <small></small>,\n dataIndex: 'success',\n key: 'success',\n render: (e) => {\n return (e === false) ? \"Not found\" : \"\"\n }\n },\n ];\n\n const stores = window.sitesettings.stores.map((item, index) => { return item.store_number.toString() })\n\n const groups = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"];\n\n\n const updateSan = (_key, _field, _value) => {\n\n if (!_value) {\n setSan(\"\");\n return;\n }\n if (_value.includes(\"(\") && _value.includes(\")\")) {\n let _san = _value.match(/\\((.*)\\)/).pop();\n setSan(_san)\n } else {\n setSan(\"\");\n }\n return;\n }\n\n\n const drawProgress = () => {\n\n if (uploaded) {\n\n return (\n <>\n <Form layout=\"vertical\">\n <conditional.true value={(needsSan)}>\n <Space align=\"start\">\n <div>\n <div className=\"shim\" />\n <span style={{ \"color\": \"#ff4d4f\" }}>* </span>Choose customer for EDIFACT file:\n </div>\n <Form.Item required>\n {/* <OrderSearchUser width=\"190px\" updateOrder={updateSan} placeholder=\"Customer name...\" /> */}\n <Input onChange={(e) => setSan(e.target.value)} size=\"small\" placeholder=\"SAN...\" />\n </Form.Item>\n <div style={{ \"marginTop\": \"4px\" }}><Button loading={loading} onClick={() => uploadFile(file, true)} disabled={(!(san))} size=\"small\" type=\"primary\"><small>Add to cart</small></Button></div>\n </Space>\n </conditional.true>\n\n <conditional.true value={(!needsSan)}>\n\n <div>\n <div className=\"shim\" />\n <span style={{ \"color\": \"#ff4d4f\" }}>* </span>Choose a supplier and group for this data:\n </div>\n <div className=\"shim\" />\n <Space align=\"start\">\n\n <Form.Item help={<small className=\"c\">Supplier</small>}>\n <Select onChange={(e) => setSelectedSupplier(e)} showSearch style={{ \"width\": \"85px\" }} size=\"small\">\n {suppliers.map(item => {\n return <Select.Option value={item.value}>{item.value}</Select.Option>\n })}\n </Select>\n </Form.Item>\n <Form.Item help={<small className=\"c\">Group</small>}>\n <Select onChange={(e) => setSelectedGroup(e)} defaultValue={selectedGroup} style={{ \"width\": \"60px\" }} size=\"small\">\n {stores.map(item => {\n return <Select.Option value={item}>{item}</Select.Option>\n })}\n <Select.Option disabled value=\"\"></Select.Option>\n {groups.map(item => {\n return <Select.Option value={item}>{item}</Select.Option>\n })}\n </Select>\n </Form.Item>\n <Form.Item help={<small className=\"c\"> </small>}>\n <div style={{ \"marginTop\": \"0px\" }}><Button loading={loading} onClick={() => uploadFile(file, true)} disabled={(!(selectedSupplier && ((needsSan) ? (san) : (true))))} size=\"small\" type=\"primary\"><small>Add to cart</small></Button></div>\n </Form.Item>\n </Space>\n </conditional.true>\n </Form>\n <Divider style={{ \"marginTop\": \"10px\" }} dashed />\n <Table scroll={{ y: 255 }} className=\"bc\" style={{ \"border\": \"1px solid\" }} pagination={{pageSize : 500, showSizeChanger : false}} columns={columns} dataSource={results.titles} size=\"small\"></Table>\n </>\n )\n }\n // draw Upload\n return (\n <>\n <div style={{ \"height\": \"150px\" }}>\n <Upload.Dragger accept=\".txt, .pdf, .xls, .xlsx, .html, .csv\" showUploadList={false} customRequest={(e) => uploadFile(e, false)} style={{ \"padding\": \"0px 20px\", \"height\": \"300px\" }}>\n <div >\n {(loading) ? <Spin style={{ height: \"35px\" }} /> : <UploadOutlined style={{ \"fontSize\": \"30px\", height: \"35px\" }} />}\n </div>\n\n {(loading && <>\n <p className=\"ant-upload-text\">Loading, please wait.</p>\n </>)}\n {(!loading && <>\n <p className=\"ant-upload-text\">Click or drag to upload</p>\n <p className=\"ant-upload-hint\">\n Upload an Excel file (.xls or .xlsx), EDIFACT file (.txt) or a tab-delimited file (.txt) with the headers \"QTY\" and \"ISBN\".\n </p>\n </>)}\n\n </Upload.Dragger>\n </div>\n </>\n )\n }\n\n\n return (\n <>\n <Layout className=\"layout\">\n <Layout.Content style={{ \"padding\": \"0px\", \"width\": \"auto\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={5}>Import to Order Processing </Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n {(!uploaded && <div>\n ISBN header is required. If you do not include QTY header, ISBNs will be imported with a quantity of 1.\n <br /><br />\n\n You will be able to preview the list of titles before importing it into your web cart.<br />\n <a target=\"_blank\" href={process.env.PUBLIC_URL + \"/example.txt\"}>Click here to see an example text file.</a>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /></div>)}\n\n\n {drawProgress()}\n\n </div>\n </Layout.Content>\n </Layout>\n\n\n </>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport moment from \"moment\";\nimport { apiCall } from \"../../utils/Api\";\nimport Peek from \"../../components/Peek\";\nimport Overlay from \"../../components/Overlay\";\nimport Title from \"../../components/title/Title\";\nimport { Table, Button, Tag, message, Space, Radio, Spin, Divider } from \"antd\";\nimport Order from \"../../components/Order\";\nimport { useSession } from \"../../utils/Session\";\nimport conditional from \"../../tools/conditional\";\nimport PeerSales from \"../../components/PeerSales\";\nimport { drawQuantity, peerColor, warningColor, successColor, bestsellerColor, futureColor, parseSubjectsWeird } from \"../../utils/Utils\";\nimport Renderer from \"../../components/Renderer\";\nimport { CloseOutlined, SelectOutlined, PicLeftOutlined, AppstoreOutlined, MenuOutlined, ShoppingCartOutlined } from '@ant-design/icons';\nimport ItemLayouts from \"../../components/ItemLayouts\";\nimport TestOrderBox from \"../../components/TestOrderBox\";\nimport Paginate from \"../../components/Paginate\";\nimport LazyLoad from 'react-lazyload';\nexport default function CartIsbns(props) {\n\n const [session, setSession] = useSession();\n const [expanded, setExpanded] = useState([])\n const { record = {}, items = {}, pagination = false, border = false, drawComponent = () => { }, close = () => { } } = props;\n const [results, setResults] = useState([]);\n const [loading, setLoading] = useState(false);\n const [titlesLoading, setTitlesLoading] = useState(false);\n const isbns = [... new Set(items.map(item => item.isbn))];\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 20, offset: 0 });\n const [titleInfo, setTitleInfo] = useState([])\n\n const [filters, setFilters] = useState(\"cart\");\n const [titleResults, setTitleResults] = useState({ rows: [] });\n\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.isbn)) {\n setExpanded([_data.isbn]);\n } else {\n setExpanded([]);\n }\n }\n\n const drawChildTable = (_record) => {\n\n return (\n <div className=\"hideHover\" style={{ \"margin\": \"-8px -7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"20px\" }}>\n <Renderer close={true}><ItemLayouts display=\"details2\" isbn={_record.isbn} /></Renderer>\n </div>\n </div>\n )\n //return <CartIsbns items={_record.items} />\n }\n\n\n\n const removeItem = (_record) => {\n\n let obj = {\n supplier: _record.location,\n order_group: _record.order_grp,\n user_id: _record.owner_id,\n isbn: _record.isbn\n };\n\n apiCall(\"cart/delete\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Title removed successfully.\");\n setSession({ ...session, \"cart\": _result });\n }\n })\n }\n\n const getPeers = (_isbn) => {\n let row = results.find(item => item.isbn === _isbn);\n if (row) {\n let peer = row.sales.find(item => item.code === \"\").sales.rows.find(itm => itm.class === \"peer\");\n if (peer) {\n return {\n onhand: peer.onhand,\n onhandlocs: peer.onhandlocs,\n onorder: peer.onorder,\n onorderlocs: peer.onorderlocs\n }\n } else {\n return false\n }\n }\n return false;\n }\n\n\n const getPeerFromSales = (_sales, _ohhand = true) => {\n let m = _sales.find((item => item.code === \"\"));\n if (m) {\n m = m.sales.rows.find(item => item.class === \"peer\");\n if (m) {\n if (_ohhand) {\n return <small style={{ \"color\": peerColor, \"whiteSpace\": \"nowrap\" }}>{m.onhand || \"\"}<sup> {m.onhandlocs || \"\"}</sup> </small>;\n } else {\n return <small style={{ \"color\": peerColor, \"whiteSpace\": \"nowrap\" }}>{m.onorder || \"\"}<sup> {m.onorderlocs || \"\"}</sup> </small>;\n }\n\n } else {\n return <small> </small>;\n }\n }\n return \"\";\n }\n\n\n\n // const drawInventory = (_isbn, _onhand = true) => {\n\n // let f = titleInfo.find(item => item.isbn === _isbn);\n\n // if (!f) {\n // return (<></>);\n // }\n\n // let inv = \"\";\n // if (_onhand) {\n\n // inv = f.available.map((item, index) => {\n // return <div key={index} style={{ \"color\": successColor, \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\" }}>{item.onhand || \"\"} </div>\n // })\n // } else {\n\n // inv = f.available.map((item, index) => {\n // return <div key={index} style={{ \"color\": warningColor, \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\" }}>{item.onorder || \"\"} </div>\n // });\n\n // }\n\n\n // return (\n // <>\n // {inv}\n // {getPeerFromSales(f.sales, _onhand)}\n // </>\n // )\n\n\n // }\n\n const drawPeer = (_isbn, _onhand = false) => {\n let peer = getPeers(_isbn);\n if (peer) {\n return (\n <Tag style={{ \"lineHeight\": \"16px\", \"cursor\": \"pointer\" }} color=\"#a52a2a\">\n <conditional.true value={_onhand}>\n {peer.onhand}<sup>{peer.onhandlocs}</sup>\n </conditional.true>\n <conditional.true value={!_onhand}>\n {peer.onorder}<sup>{peer.onorderlocs}</sup>\n </conditional.true>\n </Tag>)\n } else {\n return \"\";\n }\n }\n\n\n const getExtra = (_isbn, field = \"title\") => {\n let _f = titleInfo.find(item => item.isbn === _isbn);\n\n if (_f) {\n\n switch (field) {\n case \"title\":\n return <>{_f.title}</>\n break;\n case \"onhand\":\n return <>{(_f.onhand) ? _f.onhand : \"\"}</>\n break;\n case \"onorder\":\n return <>{(_f.onorder) ? _f.onorder : \"\"}</>\n break;\n case \"peer_onhand\":\n return <>{(_f.peer_onhand) ? _f.peer_onhand : \"\"}<sup>{(_f.peer_onhand_locs) ? _f.peer_onhand_locs : \"\"}</sup></>\n break;\n case \"peer_onorder\":\n return <>{(_f.peer_onorder) ? _f.peer_onorder : \"\"}<sup>{(_f.peer_onorder_locs) ? _f.peer_onorder_locs : \"\"}</sup></>\n break;\n\n default:\n break;\n }\n\n } else {\n return (<></>)\n }\n }\n\n\n\n const item_columns = [\n {},\n { title: <small>Supplier</small>, key: 'location', dataIndex: 'location' },\n { title: <small>Group</small>, key: 'order_grp', dataIndex: 'order_grp' },\n {\n title: <small>Price</small>, key: 'supplier_price', dataIndex: 'supplier_price', render: (e) => {\n return (e) ? \"$\" + e.toString() : \"\";\n }\n },\n {\n title: <small>Cart</small>, key: \"cart\", dataIndex: \"cart\", render: (e, f) => {\n return <Overlay width={750} component={<TestOrderBox wrap data={f} isbn={f.isbn} />}>{drawQuantity(f.isbn, session.cart)}</Overlay>\n }\n },\n {\n title: <small>OH</small>, key: \"oh\", dataIndex: \"oh\", render: (e, f) => {\n\n return (\n <>\n <div style={{ \"color\": successColor, \"fontWeight\": \"bold\" }}>{getExtra(f.isbn, \"onhand\")}</div>\n <div><small style={{ \"color\": peerColor, \"whiteSpace\": \"nowrap\" }}>{getExtra(f.isbn, \"peer_onhand\")}</small></div>\n </>\n )\n //return drawInventory(f.isbn, true);\n }\n },\n {\n title: <small>OO</small>, key: \"oo\", dataIndex: \"oo\", render: (e, f) => {\n return (\n <>\n <div style={{ \"color\": successColor, \"fontWeight\": \"bold\" }}>{getExtra(f.isbn, \"onorder\")}</div>\n <div><small style={{ \"color\": peerColor, \"whiteSpace\": \"nowrap\" }}>{getExtra(f.isbn, \"peer_onorder\")}</small></div>\n </>\n )\n\n // return drawInventory(f.isbn, false);\n }\n },\n { title: <small>Discount</small>, key: 'discount', dataIndex: 'discount' },\n { title: <small>PM</small>, key: 'profit_margin', dataIndex: 'profit_margin' },\n {\n title: <small>Sell Price</small>, key: 'sell_price', dataIndex: 'sell_price', render: (e) => {\n return (e) ? \"$\" + e.toString() : \"\";\n }\n },\n {\n title: <small>Title</small>, width: \"200px\", key: \"title\", dataIndex: \"title\", render: (e, f) => {\n return <a onClick={() => expandCell(f)}>{getExtra(f.isbn, \"title\")}</a>;\n //return (results.find(item => item.isbn == f.isbn) ? <a onClick={() => expandCell(f)}>{results.find(item => item.isbn == f.isbn).title}</a> : \"\");\n }\n },\n { title: <small>ISBN</small>, key: 'isbn', dataIndex: 'isbn' },\n { title: <small>By</small>, key: 'owner_name', dataIndex: 'owner_name' },\n { title: <small>Age</small>, key: 'as_of', dataIndex: 'as_of', render: (e) => { return moment(e * 1000).fromNow() } },\n {\n title: <small></small>, width: \"50px\", key: 'actions', dataIndex: 'actions', render: (e, f) => {\n return <Button onClick={() => removeItem(f)} danger size=\"small\"><small>Remove</small></Button>\n }\n }, {\n key: \"blank\", width: \"10px\"\n }\n ]\n\n const dsource = [...new Map(items.map(item => [item.isbn, item])).values()].slice(paginate.offset, (paginate.current * paginate.pagesize));\n const xsource = [...new Map(items.map(item => [item.isbn, item])).values()];\n\n const getIsbns = () => {\n\n\n setLoading(true);\n let _isbns = dsource.map(item => item.isbn);\n apiCall(\"cart/getTitleInfo\", { isbns: JSON.stringify(_isbns) }, (_status, _result) => {\n if (_status) {\n setTitleInfo(_result);\n }\n setLoading(false);\n })\n }\n\n useEffect(getIsbns, [paginate.offset, paginate.pagesize]);\n\n\n const [cacheKey, setCacheKey] = useState(\"\");\n const getTitles = () => {\n\n // skip if you have cache key\n if(cacheKey){\n getTitles2(cacheKey);\n return; \n }\n\n setTitlesLoading(true)\n let _isbns = xsource.map(item => item.isbn);\n apiCall(\"browse/getCacheKeyForIsbns\", { isbns: JSON.stringify(_isbns)}, (_status, _result) => {\n if(_status){\n //_result.id\n setCacheKey(_result.id);\n getTitles2(_result.id);\n }\n })\n }\n\n const getTitles2 = (_cache_key) => {\n \n apiCall(\"browse/get\", { v:\"sequence\", x: _cache_key, l: paginate.pagesize, o: paginate.offset }, (_status, _result) => {\n if (_status) {\n setTitleResults(_result);\n }\n setTitlesLoading(false);\n })\n }\n\n useEffect(getTitles, [paginate.offset, paginate.pagesize]);\n\n\n const [browseLoad, setBrowseLoad] = useState(false);\n\n const browseCart = () => {\n setBrowseLoad(true);\n let _isbns = [...new Map(items.map(item => [item.isbn, item])).values()].map(item => item.isbn);\n\n apiCall(\"browse/getCacheKeyForIsbns\", { isbns: JSON.stringify(_isbns) }, (_status, _result) => {\n if (_status) {\n window.open(\"/purchasing/browse/filter/v/sequence/x/\" + _result.id);\n } else {\n message.error(_result.error)\n }\n setBrowseLoad(false)\n\n })\n }\n\n const colorDate = (_timestamp) => {\n let now = moment().unix();\n let color = \"inherit\";\n if (_timestamp > now) {\n // future\n color = futureColor;\n } else {\n // within the last two months\n if ((now - _timestamp) < 5274000) {\n // within the last two months\n color = successColor;\n }\n }\n return color;\n }\n\n const columns = [\n\n {},\n\n\n {\n title: <small>PubDate</small>, dataIndex: 'release_date', key: 'release_date', render: (e) => {\n return <span style={{ \"color\": colorDate(e) }}>{moment(e * 1000).format(\"MMMD-YY\")}</span>;\n }\n },\n {\n title: <small>Rank</small>, dataIndex: 'rank', key: 'rank', render: (e) => {\n return (e.hasOwnProperty(\"bestseller\") ? <span style={{ \"color\": bestsellerColor }}>{e.bestseller}</span> : <span style={{ \"color\": futureColor }}>{e.future}</span>);\n }\n },\n {\n title: <small>Cart</small>, dataIndex: 'cart', key: 'cart', render: (e, f) => {\n\n\n return (<Overlay width={750} component={<TestOrderBox wrap data={f} isbn={f.isbn} />}>{drawQuantity(f.isbn, session.cart)}</Overlay>)\n }\n },\n {\n title: <small>OH</small>, dataIndex: 'onhand', key: 'onhand', render: (e, f) => {\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"color\": successColor, \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\" }}>{item.onhand} </div>\n })}\n {/* {getPeerFromSales(f.sales)} */}\n </>\n );\n }\n },\n {\n title: <small>OO</small>, dataIndex: 'onorder', key: 'onorder', render: (e, f) => {\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"color\": warningColor, \"fontWeight\": \"bold\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\" }}>{item.onorder} </div>\n })}\n\n {/* {getPeerFromSales(f.sales, false)} */}\n </>\n );\n }\n },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e, f) => {\n\n return (\n <>\n {f.available.map(item => {\n return <div style={{ \"fontWeight\": \"normal\", \"fontStyle\": (item.code) ? \"italic\" : \"normal\", \"color\": (item.code) ? bestsellerColor : \"normal\" }}>${item.row_price} </div>\n })}\n <div> </div>\n </>\n );\n\n }\n },\n { title: <small>Bd</small>, dataIndex: 'binding_code', key: 'binding_code' },\n {\n title: <small>Title</small>, className: \"nowrap250\", dataIndex: 'title', key: 'title', render: (e, f) => {\n\n return (<a onClick={() => expandCell(f)}>{e}{(f.subtitle) ? \" : \" + f.subtitle : \"\"}</a>)\n }\n },\n {\n title: <small>Author</small>, className: \"nowrap\", dataIndex: 'authors', key: 'authors', render: (e) => {\n return e.map(item => item.name).join(\", \")\n }\n },\n { title: <small>Series</small>, className: \"nowrap\", dataIndex: 'series', key: 'series' },\n { title: <small>#</small>, dataIndex: 'series_num', key: 'series_num' },\n {\n title: <small>Subjects</small>, dataIndex: 'subjects', key: 'subjects', render: (e) => {\n return <span>\n {parseSubjectsWeird(e, 15)}\n </span>;\n }\n },\n { title: <small>Publisher</small>, className: \"nowrap\", dataIndex: 'publisher', key: 'publisher' },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn' },\n\n ]\n\n\n\n\n\n return (\n <>\n <div style={{ \"margin\": \"0 -20px\", \"marginBottom\": \"-1px\" }}>\n\n <Paginate component={<div style={{ \"display\": \"inline\", \"marginLeft\": \"10px\" }}>\n\n <Space>\n <Radio.Group onChange={(e) => setFilters(e.target.value)} value={filters} size=\"small\" buttonStyle=\"solid\">\n <Radio.Button value={\"cart\"}><small><ShoppingCartOutlined /></small></Radio.Button>\n <Radio.Button value={\"details2\"}><small><PicLeftOutlined /></small></Radio.Button>\n <Radio.Button value={\"list\"}><small><MenuOutlined /></small></Radio.Button>\n <Radio.Button value={\"cards\"}><small><AppstoreOutlined /></small></Radio.Button>\n </Radio.Group>\n <Button loading={browseLoad} onClick={() => browseCart()} size=\"small\" type=\"primary\"><small>Filter & Sort <SelectOutlined style={{ \"transform\": \"scaleX(-1)\", \"fontSize\": \"10px\" }} /></small></Button>\n </Space>\n\n </div>} hide_single={false} paginate={paginate} setPaginate={setPaginate} count={[...new Map(items.map(item => [item.isbn, item])).values()].length} />\n\n <conditional.true value={(filters === \"cart\")}>\n <Table\n size=\"small\"\n columns={item_columns}\n loading={loading}\n rowKey={\"isbn\"}\n className={(border) ? \"tableBorder\" : \"tableNoBorder\"}\n dataSource={dsource}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </conditional.true>\n\n <conditional.true value={(filters !== \"cart\")}>\n <br />\n <conditional.true value={(filters === \"list\")}>\n <div style={{ \"marginTop\": \"-20px\" }}>\n <Table\n size=\"small\"\n pagination={false}\n rowKey={\"isbn\"}\n loading={titlesLoading}\n columns={columns}\n dataSource={titleResults.rows}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </div>\n </conditional.true>\n\n <Spin spinning={titlesLoading}>\n\n {/* Split into chunks so renderer can draw placeholder */}\n <conditional.true key={\"cards\"} value={(filters === \"cards\")}>\n <div style={{ \"padding\": \"0px 20px\" }}>\n {titleResults.rows.reduce((all, one, i) => {\n const ch = Math.floor(i / 5);\n all[ch] = [].concat((all[ch] || []), one);\n return all\n }, []).map((item, index) => {\n return <div key={item[0].isbn}><Renderer><ItemLayouts data={item} index={index} display={filters} /></Renderer><Divider dashed /></div>\n })}\n </div>\n </conditional.true>\n\n <conditional.true value={(filters === \"details2\")}>\n <div style={{ \"padding\": \"0px 20px\" }}>\n {titleResults.rows.map((item) => {\n return <LazyLoad offset={500} height={360}><div key={item.isbn}><Renderer close={false}><ItemLayouts data={item} display={filters} /></Renderer> <Divider dashed /></div></LazyLoad>\n })}\n </div>\n </conditional.true>\n </Spin>\n </conditional.true>\n\n\n <Paginate hide_single={true} paginate={paginate} setPaginate={setPaginate} count={[...new Map(items.map(item => [item.isbn, item])).values()].length} />\n </div>\n </>\n )\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Input, Popover, Button, Modal, message, Space } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport { MessageFilled } from '@ant-design/icons';\n\nexport default function CartNote(props) {\n\n const { disabled=false, row = {}, saveNote = () => { } } = props;\n const [note, setNote] = useState(props.note);\n const [visible, setVisible] = useState(false);\n\n const resetNote = () =>{\n setNote(props.note);\n }\n\n useEffect(resetNote, [props.note]);\n\n\n const save = (_delete = false) => {\n setVisible(false);\n\n if(_delete){\n saveNote(\"\", row);\n \n } else {\n saveNote(note, row);\n }\n \n }\n\n const drawEditior = () => {\n return (\n <>\n <Input.TextArea onChange={(e) => setNote(e.target.value)} maxLength={1000} showCount defaultValue={note}></Input.TextArea>\n <div className=\"shim\" />\n <Space>\n <Button onClick={() => setVisible(false)} type=\"secondary\" size=\"small\"><small>Cancel</small></Button>\n <Button onClick={() => save(true)} type=\"primary\" danger size=\"small\"><small>Delete</small></Button>\n <Button onClick={() => save()} type=\"primary\" size=\"small\"><small>Save</small></Button>\n \n </Space>\n </>\n )\n }\n\n if(disabled){\n return <div style={{ \"color\": (props.note) ? \"#edd23a\" : \"#aaa\", \"opacity\" : \"0.5\" }}>  <MessageFilled /></div>\n }\n\n return (\n <>\n <Popover \n destroyTooltipOnHide \n onVisibleChange={(e) => setVisible(e)} \n visible={visible} \n content={drawEditior()} \n title={<small>Notes</small>} \n trigger=\"click\">\n <div onClick={() => setVisible(!visible)} style={{ \"width\": \"100%\", \"display\": \"block\", \"cursor\": \"pointer\", \"overflow\": \"hidden\" }}>\n <div style={{ \"color\": (props.note) ? \"#edd23a\" : \"#aaa\" }}>  <MessageFilled /></div>\n </div>\n </Popover>\n </>\n )\n}","import React, { useState } from \"react\";\n\nimport { Button, Divider, message, Modal, Popconfirm, Space, Typography, Spin } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport { useSession } from \"../../utils/Session\";\nexport default function CartSubmitBtn(props) {\n\n \n const [session, setSession] = useSession();\n const [visible, setVisible] = useState(false);\n const [result, setResult] = useState({});\n const [error, setError] = useState({})\n const { filters = {}, group_bys = [], data = {}, skipConfirm = false, disabled=false, setExpanded = () => {} } = props;\n const [warn, setWarn] = useState(true);\n const [loading, setLoading] = useState(false); \n \n\n const [checks, setChecks] = useState({\n weblink_confirmed: {\n required: true,\n checked: false,\n }\n\n });\n\n const [pregame, setPregame] = useState(\n {\n weblink_confirmed: false,\n split_skip: false,\n check_send_multistore: false,\n }\n )\n\n const checkSubmit = (_weblink_confirmed = false, _split_skip = false, _check_send_multistore = false, _send_multistore = false) => {\n\n setExpanded([]);\n let obj = {}\n // // supplier\n // if (group_bys.location) {\n // obj.supplier = data.location;\n // }\n // // group\n // if (group_bys.order_grp) {\n // obj.order_group = data.order_grp;\n // }\n // // user\n // if (group_bys.owner_id) {\n // obj.user_id = data.owner_id;\n // }\n obj.supplier = filters.supplier || (filters.group_bys.location) ? data.location : false;\n if (!obj.supplier) { delete obj.supplier }\n obj.order_group = filters.group || (filters.group_bys.order_grp) ? data.order_grp : false;\n if (!obj.order_group && obj.order_group === false) { delete obj.order_group }\n obj.user_id = filters.user || (filters.group_bys.owner_id) ? data.owner_id : false;\n if (!obj.user_id) { delete obj.user_id }\n\n obj.split_skip = _split_skip;\n obj.weblink_confirmed = _weblink_confirmed;\n obj.check_send_multistore = _check_send_multistore;\n\n apiCall(\"cart/checkSubmit\", obj, (_status, _result) => {\n setLoading(true);\n if (_status) {\n obj.send_multistore = _send_multistore;\n apiCall(\"cart/submit\", obj, (_s, _r) => {\n if (_s) {\n setSession({ ...session, \"cart\": _r });\n message.success(\"Order sent.\");\n setVisible(false);\n } else {\n setError(_r);\n setVisible(true);\n setVisible(false);\n }\n setLoading(false)\n })\n\n } else {\n setError(_result);\n setVisible(true);\n setLoading(false);\n }\n })\n }\n\n\n const splitOrder = () => {\n\n let obj = {}\n\n // supplier\n if (group_bys.location) {\n obj.supplier = data.location;\n }\n\n // group\n if (group_bys.order_grp) {\n obj.order_group = data.order_grp;\n }\n\n // user\n if (group_bys.owner_id) {\n obj.user_id = data.owner_id;\n }\n\n setLoading(true)\n\n apiCall(\"cart/splitMultistore\", obj, (_status, _results) => {\n \n if (_status) {\n setSession({ ...session, \"cart\": _results });\n message.success(\"Order split successfully.\");\n } else {\n message.error(\"Order split failed.\")\n }\n setLoading(false)\n\n setVisible(false);\n\n });\n\n }\n\n\n\n\n\n const drawError = (_error) => {\n\n\n switch (_error) {\n\n\n case \"Can send to multistores\":\n return (\n <>\n <Typography.Title level={5}>Send to other store </Typography.Title>\n <p>The order you are about to submit has a numerical order group that represents a remote store.\n Choose to have this order sent to either the remote or main store</p>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setVisible(false)}>Cancel</Button>\n <Button onClick={() => checkSubmit(true, true, true, false)} type=\"primary\">Send to main store</Button>\n <Button onClick={() => checkSubmit(true, true, true, true)} type=\"primary\">Send to other store</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </>\n )\n\n\n\n case \"Weblink not running\":\n return (\n <>\n <Typography.Title level={5}>Weblink is not running </Typography.Title>\n <p>Your Bookmanager system appears to not have WebLink connected for automatic file downloads (in Bookmanager, choose Setup, Weblink).</p>\n <p>You may need to exit and re-enter Bookmanager from the station running WebLink. You can submit this order now, but it will not be received into Bookmanager until WebLink automatic-downloads is enabled and connected.</p>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setVisible(false)}>Cancel</Button>\n <Button onClick={() => checkSubmit(true, false, false)} type=\"primary\">Send order</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </>\n )\n\n case \"Can split\":\n return (\n <>\n <Spin spinning={loading} tip=\"Processing - Please wait...\">\n <Typography.Title level={5}>Split order </Typography.Title>\n <p>The order you are about to submit has items ordered for other locations.</p>\n <p>Choose to either submit the entire order to the main store or \"Split Order\" into separate pending orders. Split orders can then be optionally sent to each store's Bookmanager.</p>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setVisible(false)}>Cancel</Button>\n <Button onClick={() => splitOrder()}>Split order</Button>\n <Button onClick={() => checkSubmit(true, true, false)} type=\"primary\">Submit as is</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Spin>\n </>\n )\n\n default:\n\n return (\n <>\n <Typography.Title level={5}>Error</Typography.Title>\n <p>{_error}</p>\n\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setVisible(false)}>Close</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </>\n )\n\n\n }\n\n }\n\n\n\n return (\n <>\n <Modal footer={false} onCancel={() => setVisible(false)} visible={visible}>\n {drawError(error.error)}\n </Modal>\n\n {(skipConfirm && <> <Button onClick={() => checkSubmit(false, false, false)} type=\"primary\" size=\"small\"><small>Submit</small></Button> </>)}\n\n {(!skipConfirm && <>\n <Popconfirm title={<>Submit these titles to your <br />Bookmanager software?</>} onConfirm={() => checkSubmit(false, false, false)}>\n <Button disabled={disabled} type=\"primary\" size=\"small\"><small>Submit</small></Button>\n </Popconfirm>\n </>)}\n\n\n </>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Input, Popconfirm } from \"antd\";\nexport default function InputConfirm(props) {\n\n const { disabled=false, defaultValue, style = {}, flag = \"\", row = {}, title = \"Are you sure?\", className = \"\", callback = () => { return \"\" } } = props;\n const [value, setValue] = useState(defaultValue);\n const [visible, setVisible] = useState(false);\n\n const resetValue = () =>{\n setValue(defaultValue);\n }\n\n useEffect(resetValue, [defaultValue]);\n\n const cancel = () => {\n setVisible(false);\n setValue(defaultValue);\n }\n\n const confirm = () => {\n setVisible(false);\n callback(flag, value, row);\n }\n\n\n\n return (<><Popconfirm disabled={disabled} title={title} onConfirm={(e) => confirm()} onCancel={() => cancel()} visible={visible}><Input disabled={disabled} size=\"small\" onKeyDown={(e) => { if ((e.key === \"Enter\")) { setVisible((e.target.value !== defaultValue)) } }} className={className} style={style} value={value} onBlur={(e) => setVisible((e.target.value !== defaultValue))} onChange={(e) => setValue(e.target.value.toUpperCase())} /></Popconfirm></>)\n\n\n}","import { CloseOutlined, FileExcelOutlined, FilterFilled, FilterOutlined, MessageFilled, RollbackOutlined } from '@ant-design/icons';\nimport { AutoComplete, Button, Checkbox, DatePicker, Divider, Dropdown, Form, Input, Layout, message, Modal, Popconfirm, Radio, Select, Space, Statistic, Table, Typography } from \"antd\";\nimport Cookies from \"js-cookie\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\n\nimport Overlay from \"../components/Overlay\";\nimport Peek from \"../components/Peek\";\nimport Renderer from \"../components/Renderer\";\nimport Title from \"../components/title/Title\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiCall, apiDownload } from \"../utils/Api\";\nimport conditional from \"../utils/conditional\";\nimport { useSession } from \"../utils/Session\";\nimport { addKeys, getGroups } from \"../utils/Utils\";\nimport CartImport from \"./cart/CartImport\";\nimport CartIsbns from \"./cart/CartIsbns\";\nimport CartNote from \"./cart/CartNote\";\nimport CartSubmitBtn from \"./cart/CartSubmitBtn\";\nimport InputConfirm from \"./cart/InputConfirm\";\n\nexport default function CartPage() {\n\n const [session, setSession] = useSession();\n const [expanded, setExpanded] = useState([]);\n const [isFiltering, setIsFiltering] = useState(true);\n const [loading, setLoading] = useState(false);\n const [skipConfirm, setSkipConfirm] = useState((Cookies.get(\"submit_confirmation\") === \"true\") ? true : false)\n\n const is_multistore = (window.sitesettings.stores.length>1);\n\n const toggleSubmitConfirmations = () => {\n\n if (Cookies.get(\"submit_confirmation\") === \"true\") {\n Cookies.set(\"submit_confirmation\", \"false\");\n setSkipConfirm(false);\n } else {\n Cookies.set(\"submit_confirmation\", \"true\");\n setSkipConfirm(true);\n }\n\n }\n\n const getSession = () => {\n setLoading(true);\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n setSession(_result);\n } else {\n message.error(_result.error);\n }\n setLoading(false)\n })\n }\n\n useEffect(getSession, [])\n\n const initFilters = {\n supplier: \"\",\n group: \"\",\n user: \"\",\n group_by: \"location\",\n group_bys: { location: true, order_grp: true, owner_id: false, store: false },\n sort_by: \"location\",\n skip: false,\n store: \"\"\n }\n\n const reset = () => {\n setFilters(initFilters);\n }\n\n const [filters, setFilters] = useState(\n initFilters\n );\n\n\n const actions_disabled = (filters.group_bys.store || filters.store);\n\n const downloadExcel = (_row) => {\n\n let obj = {}\n obj.supplier = filters.supplier || (filters.group_bys.location) ? _row.location : false;\n if (!obj.supplier) { delete obj.supplier }\n obj.order_group = filters.group || (filters.group_bys.order_grp) ? _row.order_grp : false;\n if (!obj.order_group) { delete obj.order_group }\n obj.user_id = filters.user || (filters.group_bys.owner_id) ? _row.owner_id : false;\n if (!obj.user_id) { delete obj.user_id }\n\n apiDownload(obj, \"cart/getExcel\", true);\n }\n\n\n // \"id\": 13799815,\n // \"isbn\": \"9781571313560\",\n // \"quantity\": 1,\n // \"location\": \"QTA\",\n // \"supplier_price\": \"26.95\",\n // \"sell_price\": \"26.95\",\n // \"discount\": \"RG\",\n // \"exchange\": \"1\",\n // \"order_grp\": \"A\",\n // \"owner_id\": 554904,\n // \"multistore_quantity\": [\n // 1\n // ],\n // \"shipto_name\": \"\",\n // \"cust_po\": \"\",\n // \"as_of\": 1633041091,\n // \"order_notes\": \"\"\n\n const arrayToKeyString = (_arr) => {\n\n let a = [];\n _arr.forEach(item => {\n Object.keys(item).forEach(_key => {\n if (item[_key]) {\n a.push(_key);\n }\n })\n })\n\n return a.join(\"-\");\n }\n\n const calculateProfitMargin = (_sell_price, _publish_price) => {\n let ret = (1 - (_publish_price / _sell_price)) * 100;\n if (ret > 100 || ret < 0 || isNaN(ret)) {\n return \"\"\n }\n return ret.toFixed(0);;\n }\n\n const convertDiscountToInt = (_discount, _profit_margin = 40) => {\n\n if (_discount == 'SH') {\n _discount = 40;\n }\n\n if(_discount == 'RG'){\n _discount = _profit_margin;\n }\n\n if (_discount == 'BX' || _discount == 'HI' || _discount == '') {\n _discount = 40;\n }\n\n if (_discount == 'NT') {\n _discount = 0;\n }\n _discount -= 0;\n return _discount;\n }\n\n const deleteRow = (_row) => {\n let obj = {}\n\n obj.supplier = filters.supplier || (filters.group_bys.location) ? _row.location : false;\n if (!obj.supplier) { \n delete obj.supplier \n }\n\n // obj.order_group = filters.group || (filters.group_bys.order_grp) ? _row.order_grp : false;\n\n // if (!obj.order_group ) { \n // delete obj.order_group \n // }\n if(filters.group || filters.group_bys.order_grp){\n obj.order_group = _row.order_grp;\n }\n\n obj.user_id = filters.user || (filters.group_bys.owner_id) ? _row.owner_id : false;\n if (!obj.user_id) { \n delete obj.user_id \n }\n\n setLoading(true);\n apiCall(\"cart/delete\", obj, (_status, _result) => {\n if (_status) {\n setSession({ ...session, \"cart\": _result })\n } else {\n // refetch the session\n message.error(_result.error)\n }\n setLoading(false);\n })\n\n }\n\n const filterData = () => {\n\n // filter by supplier, group and user or multiples \n\n let _supp = [];\n\n session.cart.forEach((item => {\n item.suppliers.forEach(supp => {\n\n // Testing code - some stores set carts on v1 and don't set the multistore value (get tobias to do this on the server)\n // if(supp.multistore_quantity.length === 0){\n // supp.multistore_quantity = [{\n // \"1158481\": supp.quantity\n // }]\n // }\n\n\n // Adding more synthetic rows for mulitistore location sorting/filtering\n\n \n\n supp.multistore_quantity.forEach(store => {\n // only one ideration\n Object.keys(store).forEach(_key => {\n if (store[_key]) {\n supp.store = _key;\n supp.store_qty = store[_key];\n\n _supp.push({ ...supp });\n }\n })\n })\n //_supp.push(supp);\n // OG way - no synthetic rows for multistore sorting/filtering\n //_supp.push(supp);\n })\n }))\n\n \n\n const filteredCart = _supp.filter(item => {\n\n let _rtrn = true;\n\n if (filters.supplier) {\n _rtrn = (item.location === filters.supplier);\n }\n\n if (filters.group && _rtrn) {\n _rtrn = (item.order_grp === filters.group);\n }\n\n if (filters.user && _rtrn) {\n _rtrn = (item.owner_id === filters.user);\n }\n\n if (filters.store) {\n _rtrn = (item.store === filters.store);\n }\n\n\n return _rtrn;\n\n });\n\n\n const groupMultiple = (_arr) => {\n return [..._arr.reduce((r, o) => {\n let _key = [];\n // add em if checked... \n Object.keys(filters.group_bys).map(item => {\n if (filters.group_bys[item]) {\n _key.push(o[item]);\n }\n })\n\n\n\n\n // if (_key.length === 0) {\n // // default owner\n // _key.push(o.owner_id);\n // }\n\n // convert to unique string\n _key = _key.join(\"-\");\n\n const item = r.get(_key) || Object.assign({}, o, {\n key: _key,\n suppliers: [],\n stores: [],\n supplier_names: [],\n groups: [],\n isbns: [],\n items: [],\n cart: 0,\n supplier_price: 0,\n sell_price: 0,\n discounts: [],\n margins: 0,\n by: [],\n age: moment().unix(),\n });\n\n // group unique suppliers\n if (!item.suppliers.includes(o.location)) {\n item.suppliers.push(o.location);\n }\n\n // group unique suppliers\n if (!item.supplier_names.includes(o.location_name)) {\n item.supplier_names.push(o.location_name);\n }\n\n // group unique groups\n if (!item.groups.includes(o.order_grp)) {\n\n item.groups.push(o.order_grp);\n }\n\n // group unique stores\n\n if (!item.stores.includes(o.store)) {\n\n item.stores.push(o.store);\n }\n\n\n // o.multistore_quantity.forEach(_item => { \n // Object.keys(_item).forEach(key => {\n // if ((_item[key]) && !item.stores.includes(key)) {\n // item.stores.push(key);\n // }\n // })\n // })\n\n // group unique isbns \n if (!item.isbns.includes(o.isbn)) {\n item.isbns.push(o.isbn);\n }\n\n // group cart items\n \n item.items.push(o);\n \n // group unique owners \n if (!item.by.includes(o.owner_name)) {\n item.by.push(o.owner_name);\n }\n\n // add up cart\n\n if(is_multistore){\n item.cart += o.store_qty;\n } else {\n item.cart += o.quantity;\n }\n \n\n \n\n \n \n\n // add up supplier price\n item.supplier_price += parseFloat(parseFloat(o.supplier_price) * o.store_qty);\n\n // add up sell price\n item.sell_price += (parseFloat(o.sell_price) * o.store_qty);\n\n // push margins\n item.margins += parseFloat((1 - (convertDiscountToInt(o.discount) / 100)) * parseFloat(o.supplier_price)) * o.store_qty;\n\n // push discounts\n item.discounts.push(convertDiscountToInt(o.discount, o.profit_margin));\n\n item.age = (o.as_of < item.age) ? o.as_of : item.age;\n\n return r.set(_key, item);\n }, new Map).values()];\n }\n\n return groupMultiple(filteredCart).sort((a, b) => {\n let _compare = a[filters.sort_by].localeCompare(b[filters.sort_by]);\n\n\n if (_compare !== 0) {\n return _compare;\n } else {\n\n if (filters.sort_by === \"order_grp\") {\n if (a.location_name && b.location_name) {\n return a.location_name.localeCompare(b.location_name);\n } else {\n return 1;\n }\n\n } else {\n return a.order_grp.localeCompare(b.order_grp);\n }\n\n }\n\n });\n\n\n return groupMultiple(filteredCart).sort((a, b) => a[filters.sort_by].localeCompare(b[filters.sort_by]));\n }\n\n const saveNote = (_note, _row) => {\n\n\n let obj = {}\n obj.supplier = filters.supplier || _row.location;\n obj.order_group = filters.group || _row.order_grp;\n obj.note = _note;\n\n\n apiCall(\"cart/setNote\", obj, (_status, _result) => {\n if (_status) {\n setSession({ ...session, \"cart\": _result });\n }\n })\n\n }\n\n\n const checkModify = (_key, _value, _row, _msg) => {\n\n Modal.confirm({ title: \"Please confirm\", content: <div style={{ \"opacity\": \"0.6\" }}>{_msg}</div>, onOk: () => modify(_key, _value, _row) });\n\n }\n\n const modify = (_key, _value, _row, e) => {\n let obj = {}\n obj.supplier = filters.supplier || (filters.group_bys.location) ? _row.location : false;\n if (!obj.supplier) { delete obj.supplier }\n obj.order_group = filters.group || (filters.group_bys.order_grp) ? _row.order_grp : false;\n if (!obj.order_group) { delete obj.order_group }\n obj.user_id = filters.user || (filters.group_bys.owner_id) ? _row.owner_id : false;\n if (!obj.user_id) { delete obj.user_id }\n obj[_key] = _value;\n\n setLoading(true);\n\n apiCall(\"cart/edit\", obj, (_status, _result) => {\n if (_status) {\n setSession({ ...session, \"cart\": _result });\n } else {\n message.error(_result.error)\n }\n setLoading(false)\n })\n }\n\n const modifyInput = (_key, _value, _row) => {\n // eslint-disable-next-line default-case\n switch (_key) {\n case \"suppliers\":\n return <InputConfirm disabled={(actions_disabled)} callback={modify} title=\"Changing a supplier may result in a merge.\" flag={\"new_supplier\"} row={_row} className=\"tinyInput\" defaultValue={_value} style={{ \"width\": \"58px\" }} />\n case \"discounts\":\n return <InputConfirm disabled={(actions_disabled)} callback={modify} title=\"Are you sure you wish to change the discount?\" flag={\"discount\"} row={_row} className=\"tinyInput\" defaultValue={_value} style={{ \"width\": \"58px\" }} />\n case \"groups\":\n // return (\n // <AutoComplete\n // value={_value}\n // className=\"tinyAutocomplete\" \n // dropdownClassName=\"tinyDropdown\"\n // onChange={(e) => checkModify(\"new_order_group\", e, _row, \"Changing a group may result in a merge.\")}\n // style={{ \"fontSize\": \"11px\", \"width\": \"45px\" }}\n // options={getGroups().map(item => {\n // return {\n // value: item\n // }\n // })}\n // />\n // )\n return (\n <Select disabled={(actions_disabled)} showSearch onChange={(e) => checkModify(\"new_order_group\", e, _row, \"Changing a group may result in a merge.\")} value={_value} style={{ \"fontSize\": \"11px\", \"width\": \"45px\" }} showArrow={false} className=\"tinyAutocomplete\" dropdownClassName=\"tinyDropdown\">\n {getGroups().map((item) => {\n return <Select.Option key={item} value={item}>{item}</Select.Option>\n })}\n </Select>\n )\n }\n\n }\n\n\n // suppliers: [],\n // groups: [],\n // isbns: [],\n // cart: 0,\n // supplier_price: 0,\n // sell_price: 0,\n // discounts : [],\n // margins : [],\n // age : 0,\n\n const mergeNote = (_sup, _group, _notes, _check = false) => {\n\n if (_sup.length === 1 && _group.length === 1) {\n if (_check) { return true; }\n if (_notes) {\n return _notes.split(\"\\n\").map((note, index) => {\n return (<div key={index} style={{ \"fontStyle\": \"italic\", \"color\": \"#aaa\", \"lineHeight\": \"12px\" }}>{note}</div>)\n });\n } else {\n return \"\";\n }\n }\n return (_check) ? false : \"\";\n }\n\n const mergeData = (_arr, average = false) => {\n\n if (_arr.length === 0) {\n return \"\";\n }\n // average\n if (average) {\n return parseInt(_arr.reduce((total, obj) => (parseFloat(obj)) + total, 0) / _arr.length);\n }\n\n if (_arr.length === 1) {\n return _arr[0];\n } else {\n return \"(\" + _arr.length.toString() + \")\";\n }\n }\n\n const columns = [\n\n { key: \"blank\", width: \"10px\" },\n {\n title: <small>Supplier</small>, className: \"cellBorder\", key: 'suppliers', dataIndex: 'suppliers', render: (e, f) => {\n return (e.length > 1) ? mergeData(e) : modifyInput(\"suppliers\", mergeData(e), f);\n }\n },\n {\n title: <small>Group</small>, className: \"cellBorder\", key: 'groups', dataIndex: 'groups', render: (e, f) => {\n return (e.length > 1) ? mergeData(e) : modifyInput(\"groups\", mergeData(e), f);\n }\n },\n {\n title: <small>Supplier Name</small>, className: \"cellBorder\", key: 'supplier_names', dataIndex: 'supplier_names', render: (e, f) => {\n return <><a onClick={() => expandCell(f)}>{mergeData(e)}{mergeNote(f.suppliers, f.groups, f.note)}</a></>;\n }\n },\n\n {\n title: <small>Store</small>, key: 'stores', dataIndex: 'stores', render: (e, f) => {\n // return <pre>{JSON.stringify(e, null, 2)}</pre>;\n return (e.length > 1) ? mergeData(e) : e;\n }\n },\n\n {\n title: <small>Note</small>, key: 'note', dataIndex: 'note', render: (e, f) => {\n return (mergeNote(f.suppliers, f.groups, f.note, true)) ? <><CartNote disabled={actions_disabled} saveNote={saveNote} row={f} note={e} /></> : \"\";\n }\n },\n\n {\n title: <small>ISBN's</small>, key: 'isbns', dataIndex: 'isbns', render: (e, f) => {\n \n return <Button className=\"bc\" type=\"link\" size=\"small\" onClick={() => expandCell(f)}><small>{e.length}</small></Button>\n }\n },\n { title: <small>Cart</small>, key: 'cart', dataIndex: 'cart' },\n {\n title: <small><nobr>Supplier Price</nobr></small>, key: 'supplier_price', dataIndex: 'supplier_price', render: (e) => {\n return (e) ? \"$\" + e.toFixed(2).toString() : \"\";\n }\n },\n {\n title: <small>Discount</small>, key: 'discounts', dataIndex: 'discounts', render: (e, f) => {\n return modifyInput(\"discounts\", mergeData(e, true), f);\n }\n },\n {\n title: <small><nobr>Sell</nobr></small>, key: 'sell_price', dataIndex: 'sell_price', render: (e) => {\n return (e) ? \"$\" + e.toFixed(2).toString() : \"\";\n }\n },\n {\n title: <small>Margin</small>, key: 'margins', dataIndex: 'margins', render: (e, f) => {\n\n return calculateProfitMargin(f.sell_price, e);\n\n }\n },\n { title: <small>Age</small>, key: 'age', dataIndex: 'age', render: (e) => { return moment(e * 1000).fromNow() } },\n {\n title: <small>By</small>, className: \"cellBorder\", key: 'by', dataIndex: 'by', render: (e) => {\n return mergeData(e);\n }\n },\n {\n title: <small>XLS</small>, width: \"20px\", className: \"cellBorder\", key: \"excel\", dataIndex: \"excel\", render: (e, f) => {\n return <Button disabled={(actions_disabled)} onClick={() => downloadExcel(f)} type=\"link\"><FileExcelOutlined style={{ \"fontSize\": \"16px\" }} /></Button>\n }\n },\n {\n title: <small>Actions</small>, width: \"100px\", key: 'supplier', dataIndex: 'supplier', render: (e, f) => {\n return (\n <Space>\n <Popconfirm disabled={(actions_disabled)} title=\"Remove these titles from your cart?\" onConfirm={() => deleteRow(f)}>\n <Button disabled={(actions_disabled)} danger size=\"small\"><small>Remove</small></Button>\n </Popconfirm>\n <CartSubmitBtn setExpanded={setExpanded} disabled={(actions_disabled)} skipConfirm={skipConfirm} data={f} filters={filters} group_bys={filters.group_bys} />\n </Space>\n )\n }\n }\n ]\n\n // \"id\": 13799815,\n // \"isbn\": \"9781571313560\",\n // \"quantity\": 1,\n // \"location\": \"QTA\",\n // \"supplier_price\": \"26.95\",\n // \"sell_price\": \"26.95\",\n // \"discount\": \"RG\",\n // \"exchange\": \"1\",\n // \"order_grp\": \"A\",\n // \"owner_id\": 554904,\n // \"multistore_quantity\": [\n // 1\n // ],\n // \"shipto_name\": \"\",\n // \"cust_po\": \"\",\n // \"as_of\": 1633041091,\n // \"order_notes\": \"\"\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n const drawChildTable = (_record) => {\n return (\n <div className=\"hideHover\" style={{ \"margin\": \"-8px -7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <Renderer close={false}>\n <CartIsbns record={_record} items={_record.items} />\n </Renderer>\n </div>\n </div>\n )\n }\n\n const alternateRowColours = (_record, _index) => {\n if(_index%2 === 1){\n return \"evenRowColour\"\n }\n }\n\n const group_set = [];\n const owner_set = [];\n const unique_ownerset = [];\n const location_set = [];\n\n\n if (session.hasOwnProperty(\"cart\")) {\n session.cart.forEach(item => {\n item.suppliers.forEach((supp => {\n group_set.push(supp.order_grp);\n let find = owner_set.find(item => item.id == supp.owner_id);\n if (!find) {\n unique_ownerset.push({ id: supp.owner_id, name: supp.owner_name });\n }\n owner_set.push({ id: supp.owner_id, name: supp.owner_name });\n location_set.push(supp.location);\n\n }))\n })\n }\n\n\n return (\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Cart\"\n filters={\n <Form size=\"small\" layout=\"vertical\">\n <Space size={10}>\n <Form.Item label={<small>Sort by</small>}>\n <Radio.Group value={filters.sort_by} onChange={(e) => setFilters({ ...filters, \"sort_by\": e.target.value })}>\n <Radio.Button value=\"location\"><small>Supplier</small></Radio.Button>\n <Radio.Button value=\"order_grp\"><small>Group</small></Radio.Button>\n </Radio.Group>\n </Form.Item>\n <Form.Item label={<small>Group by</small>}>\n <div className=\"ant-radio-group ant-radio-group-small\">\n <Radio.Button onClick={() => setFilters({ ...filters, \"group_bys\": { ...filters.group_bys, \"location\": !filters.group_bys.location } })} checked={(filters.group_bys.location)} ><small>Supplier</small></Radio.Button>\n <Radio.Button onClick={() => setFilters({ ...filters, \"group_bys\": { ...filters.group_bys, \"order_grp\": !filters.group_bys.order_grp } })} checked={(filters.group_bys.order_grp)}><small>Group</small></Radio.Button>\n <Radio.Button onClick={() => setFilters({ ...filters, \"group_bys\": { ...filters.group_bys, \"owner_id\": !filters.group_bys.owner_id } })} checked={(filters.group_bys.owner_id)} ><small>User</small></Radio.Button>\n {((window.sitesettings.stores.length > 1) && <Radio.Button onClick={() => setFilters({ ...filters, \"group_bys\": { ...filters.group_bys, \"store\": !filters.group_bys.store } })} checked={(filters.group_bys.store)} ><small>Location</small></Radio.Button>)}\n </div>\n </Form.Item>\n <Form.Item label={<small>Supplier</small>}>\n <Select placeholder={<small>Select...</small>} value={(filters.supplier) ? filters.supplier : null} showSearch onChange={(e) => setFilters({ ...filters, \"supplier\": e })} style={{ width: 90 }}>\n {(filters.supplier && <Select.Option key=\"\" value=\"\"><small>- none -</small></Select.Option>)}\n {[... new Set(location_set)].map((_location) => {\n return (<Select.Option key={_location} value={_location}><small>{_location}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Form.Item label={<small>Group</small>}>\n <Select placeholder={<small>Select...</small>} value={(filters.group) ? filters.group : null} showSearch onChange={(e) => setFilters({ ...filters, \"group\": e })} style={{ width: 90 }}>\n {(filters.group && <Select.Option value=\"\"><small>- none -</small></Select.Option>)}\n {[... new Set(group_set)].map((_order_grp) => {\n return (<Select.Option key={_order_grp} value={_order_grp}><small>{_order_grp}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Form.Item label={<small>User</small>} >\n <Select placeholder={<small>Select...</small>} value={(filters.user) ? filters.user : null} onChange={(e) => setFilters({ ...filters, \"user\": e })} style={{ width: 160 }}>\n {(filters.user && <Select.Option value=\"\"><small>- none -</small></Select.Option>)}\n {unique_ownerset.map((_owner) => {\n return (<Select.Option key={_owner.id} value={_owner.id}><small>{_owner.name}</small></Select.Option>)\n })}\n </Select>\n </Form.Item> \n\n <conditional.true value={(window.sitesettings.stores.length > 1)}>\n <Form.Item label={<small>Location</small>} >\n <Select placeholder={<small>Select...</small>} value={(filters.store) ? filters.store : null} onChange={(e) => setFilters({ ...filters, \"store\": e })} style={{ width: 160 }}>\n\n {(filters.store && <Select.Option value=\"\"><small>- none -</small></Select.Option>)}\n {window.sitesettings.stores.map((_store) => {\n return (<Select.Option key={_store.san} value={_store.san}><small>{_store.name}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n </conditional.true>\n\n\n <Form.Item label={<small>Import</small>}>\n <Overlay width={565} component={<CartImport />}><Button type=\"primary\"><small><FileExcelOutlined /> Import</small></Button></Overlay>\n </Form.Item>\n\n <Form.Item label={<small> </small>}>\n <Button disabled={(JSON.stringify(initFilters) === JSON.stringify(filters))} onClick={() => reset()} type=\"secondary\"><small><RollbackOutlined /> Reset</small></Button>\n </Form.Item>\n\n <Form.Item label={<small> </small>}>\n <Checkbox onChange={() => toggleSubmitConfirmations()} checked={skipConfirm}><small>Skip submit confirmation</small></Checkbox>\n </Form.Item>\n </Space>\n <br clear=\"both\" />\n <div className=\"borderTop\" style={{ \"margin\": \"0 -20px\" }}>\n <Table\n loading={loading}\n size=\"small\"\n columns={columns}\n dataSource={filterData()}\n pagination={false}\n expandable\n rowClassName={(record, index) => alternateRowColours(record, index)}\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </div>\n </Form>\n }\n />\n </Layout>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Button, Divider, Empty, Form, Layout, Radio, Select, Space, Spin, Typography, Table, Input, Pagination } from \"antd\";\nimport { CloseOutlined, PicCenterOutlined, MenuOutlined, BookFilled, BookOutlined, StarOutlined, StarFilled, DeleteFilled, DownSquareFilled, DownSquareOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../utils/conditional\";\nimport moment from \"moment\";\nimport ListFav from \"../components/lists/ListFav\";\nimport Renderer from \"../components/Renderer\";\nimport ListTrash from \"../components/lists/ListTrash\";\nimport ListArchive from \"../components/lists/ListArchive\";\nimport ListFolder from \"../components/lists/ListFolder\";\nimport ListItem from \"../components/lists/ListItem\";\nimport { disabledColor, successColor, warningColor, pathToObject, objectToPath } from \"../utils/Utils\";\nimport BrowseFilters5 from \"../components/BrowseFilters5\";\nimport Paginate from \"../components/Paginate\";\nimport { useHistory } from \"react-router-dom\";\nimport { useLocation } from \"react-router-dom\";\nimport Bookmark from \"../components/Bookmark\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport Cookies from \"js-cookie\";\nimport { useSession } from \"../utils/Session\";\n\n\nexport default function CataloguesPage(props) {\n\n const history = useHistory();\n const location = useLocation();\n const [loading, setLoading] = useState(true);\n const [results, setResults] = useState({ filters: {}, rows: [], toolboxes: {} });\n const [expanded, setExpanded] = useState([]);\n const [showDetails, setShowDetails] = useState((Cookies.get(\"categories_show_list\") === \"true\") ? false : true);\n const path = \"/purchasing/catalogues\";\n const [searchFilters, setSearchFilters] = useState(pathToObject(location.pathname, \"catalogs_limit\"))\n const [current, setCurrent] = useState(parseInt(searchFilters.o / searchFilters.l) + 1);\n const [filters, setFilters] = useState({});\n const [initLoaded, setInitLoaded] = useState(false);\n const [session, setSession] = useSession();\n const [listLabel, setListLabel] = useState({ key: \"\", value: \"\" })\n\n\n const getLists = () => { }\n\n\n const getCatalogues = (_change = false, _obj = searchFilters) => {\n setLoading(true);\n let _filters = { ..._obj };\n _filters.filters = JSON.stringify(_filters.filters);\n apiCall(\"titlelist/getCatalogues\", _filters, (_status, _result) => {\n if (_status) {\n if (_result.row_count === 1) {\n if (_obj.hasOwnProperty(\"t\")) {\n if (!isNaN(_obj.t)) {\n setListLabel({ key: _result.rows[0].actual_id, value: _result.rows[0].name })\n }\n }\n }\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n setFilters(_result.filter_info);\n setResults(_result);\n setLoading(false);\n setInitLoaded(true);\n }\n\n })\n }\n\n const headerSearch = () => {\n setLoading(true);\n let obj = pathToObject(location.pathname, \"catalogs_limit\");\n setSearchFilters(obj);\n getCatalogues(false, obj);\n\n }\n\n useEffect(headerSearch, [])\n\n\n const deleteList = (_list_id) => {\n apiCall(\"titlelist/delete\", { list_id: _list_id }, (_status, _result) => {\n if (_status) {\n // getLists();\n //let res = { ...results };\n //setResults({ ...results, \"rows\": res.rows.filter(item => item.list_id !== _list_id) })\n }\n })\n }\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.list_id)) {\n setExpanded([_data.list_id]);\n } else {\n setExpanded([]);\n }\n }\n\n const drawChildTable = (_record) => {\n return (\n <>\n <div className=\"hideHover\" style={{ \"marginTop\": \"-4px\", \"marginLeft\": \"-8px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <Renderer key={_record.list_id}>\n <ListItem is_catalogue={true} getLists={getLists} setResults={setResults} results={results} data={_record} />\n </Renderer>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </>\n )\n }\n\n // const drawChildTable = (_record) => {\n // return (\n // <>\n\n // <div className=\"hideHover\" style={{ \"marginTop\": \"-4px\", \"marginLeft\" : \"-8px\" }}>\n // <div style={{ \"padding\": \"0 20px\" }}>\n // <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n // <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n // <br clear=\"both\" />\n // </div>\n // </div>\n // <div style={{ \"padding\": \"0px 20px\" }}>\n // <Renderer key={_record.list_id}>\n // <ListItem getLists={getLists} setResults={setResults} results={results} data={_record} />\n // </Renderer>\n // </div>\n // <div className=\"shim\" /><div className=\"shim\" />\n // </div>\n // </>\n // )\n // }\n\n\n\n const columns = [\n {\n title: <small>  Fav</small>, dataIndex: 'is_starred', key: 'is_starred', render: (e, f) => {\n\n return (<ListFav list={f} results={results} setResults={setResults} getLists={getCatalogues} />);\n }\n },\n\n {\n title: <small>Vendor</small>, dataIndex: 'vendor', key: 'vendor', render: (e) => {\n return (e) ? e.name : \"\";\n }\n },\n\n {\n title: <small>List name</small>, dataIndex: 'name', key: 'name', render: (e, f) => {\n return (e) ? <a onClick={() => expandCell(f)}>{e}</a> : \"\";\n }\n },\n {\n title: <small>Titles</small>, dataIndex: 'isbns_count', key: 'isbns_count'\n },\n {\n title: <small>OH</small>, dataIndex: 'onhand', key: 'onhand', render: (e) => {\n return <span style={{ \"color\": successColor, \"fontWeight\": \"500\" }}>{e}</span>\n }\n },\n {\n title: <small>OO</small>, dataIndex: 'onorder', key: 'onorder', render: (e) => {\n return <span style={{ \"color\": warningColor, \"fontWeight\": \"500\" }}>{e}</span>\n }\n },\n { title: <small>Cart</small>, dataIndex: 'cart_count', key: 'cart_count' },\n {\n title: <small>Posted</small>, dataIndex: 'date_posted', key: 'date_posted', render: (e, f) => {\n return (\n <>\n <div><nobr>{moment(e * 1000).format(\"MMMDD-YY\")}</nobr></div><div style={{ \"color\": disabledColor }}>\n {/* <em>{f.views} views</em> */}\n </div>\n </>\n )\n }\n },\n {\n title: <small>Category</small>, dataIndex: 'category', key: 'category', render: (e, f) => {\n return <><div style={{ \"color\": disabledColor }}><em>{e}</em></div><div style={{ \"fontWeight\": \"500\", \"maxWidth\": \"100px\", \"whiteSpace\": \"nowrap\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }}>{f.owner_name}</div></>\n }\n },\n {\n title: <small>Season</small>, dataIndex: 'season', key: 'season', render: (e) => {\n return (<nobr>{(e) ? e : \"\"}</nobr>);\n }\n },\n\n {\n title: <small>Folder</small>, width: \"160px\", dataIndex: 'folder', key: 'folder', render: (e, f) => {\n return (\n <Space>\n <Bookmark link list_id={f.list_id} />\n <ListTrash list={f} results={results} setResults={setResults} />\n <ListArchive list={f} results={results} setResults={setResults} />\n <ListFolder getLists={getLists} results={results.rows} setResults={setResults} folder={e} list_id={f.list_id} />\n </Space>\n )\n }\n }\n\n ]\n\n const displayGroup = () => {\n return (\n <>\n <Radio.Group size=\"small\" value={showDetails.toString()} onChange={(e) => {\n Cookies.set(\"categories_show_list\", showDetails);\n setShowDetails(!showDetails);\n }} buttonStyle=\"solid\">\n <Radio.Button value=\"true\"><small><PicCenterOutlined /></small></Radio.Button>\n <Radio.Button value=\"false\"><small><MenuOutlined /></small></Radio.Button>\n </Radio.Group>\n </>\n )\n }\n\n\n const SearchWithin = (props) => {\n\n const [v, setV] = useState(props.term);\n const searchWithin = (e, sw = true) => {\n setCurrent(1);\n let sf\n if (sw) {\n // Augment Search Filters\n sf = { ...searchFilters, \"t\": e, \"o\": 0 }\n } else {\n // Clear Search Filters\n sf = { \"t\": e, \"o\": 0 }\n }\n getCatalogues(false, sf);\n setSearchFilters(sf);\n history.push({\n pathname: path + objectToPath(sf)\n })\n }\n\n\n return (\n <Space size={2}>\n <Input value={v} onChange={(e) => {\n if (e.target.value === \"\" && props.term !== \"\") {\n // clear button\n searchWithin(\"\")\n } else {\n setV(e.target.value);\n }\n }} size=\"small\" onKeyDown={(e) => (e.key === \"Enter\" && searchWithin(e.target.value))} allowClear placeholder=\"Enter ISBN, list id or keyword within a list's name\" style={{ \"width\": \"400px\" }} />\n <Button onClick={() => searchWithin(v)} size=\"small\" type=\"primary\"><small>Search within</small></Button>\n <Button onClick={() => searchWithin(v, false)} size=\"small\" type=\"primary\"><small>Search all</small></Button>\n </Space>\n )\n }\n\n\n\n const drawFilters = () => {\n return (\n <div style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"10px 20px\", \"paddingTop\": \"0px\" }}>\n <Form layout=\"vertical\">\n <Space wrap size={[5, 0]}>\n\n <Form.Item noStyle initialValue={(searchFilters.hasOwnProperty(\"t\") ? searchFilters.t : \"\")} label={<small>Find a list</small>} name=\"customer_search\">\n <SearchWithin term={(searchFilters.hasOwnProperty(\"t\") ? searchFilters.t : \"\")} />\n </Form.Item>\n\n {/* <Form.Item noStyle label={<small>Find a list</small>} name=\"customer_search\">\n\n \n <Input.Search size=\"small\" onSearch={(e) => { \n\n let sf = { ...searchFilters, \"t\": e, \"o\" : 0 }\n setCurrent(1);\n getCatalogues(false, sf);\n history.push({ pathname: path + objectToPath(sf) })\n \n }} allowClear enterButton placeholder=\"Enter ISBN, list id or keyword within a list's name\" style={{ \"width\": \"407px\" }} />\n </Form.Item> */}\n <Form.Item noStyle label={<small>Sort</small>}>\n <Select size=\"small\" defaultValue={searchFilters.v} onChange={(e) => {\n let sf = { ...searchFilters, \"v\": e }\n getCatalogues(false, sf);\n history.push({\n pathname: path + objectToPath(sf)\n })\n }} style={{ width: 130 }}>\n <Select.Option value=\"\"><small>Date posted</small></Select.Option>\n <Select.Option value=\"name\"><small>Alphabetical</small></Select.Option>\n <Select.Option value=\"date_updated\" ><small>Last updated</small></Select.Option>\n </Select>\n </Form.Item>\n </Space>\n <br clear=\"both\" />\n </Form>\n </div>)\n }\n\n\n\n return (\n <>\n <Layout className=\"layout\" style={{ \"minHeight\": \"500px\" }}>\n\n <LayoutHeader\n title={<>\n <div style={{ \"float\": \"right\", \"marginTop\": \"-7px\" }}>{displayGroup()}</div>\n Catalogues\n\n </>}\n filters={\n <div style={{ \"margin\": \"0px -20px\", \"marginTop\": \"-15px\" }}>\n {(initLoaded && <>\n <BrowseFilters5 listLabel={listLabel} getBrowse={getCatalogues} loading={loading} toolboxes={results.toolboxes} header=\"listcat\" path={path} setCurrent={setCurrent} filters={filters} setFilters={setFilters} searchFilters={searchFilters} setSearchFilters={setSearchFilters} />\n {drawFilters()}\n </>)}\n </div>\n }\n />\n\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n\n <Paginate save=\"catalogs_limit\" loading={loading} paginate={{ current: current, offset: (searchFilters.hasOwnProperty(\"o\")) ? searchFilters.o : 0, pagesize: (searchFilters.hasOwnProperty(\"l\")) ? searchFilters.l : 20 }} setPaginate={(e) => {\n setCurrent(e.current);\n let sf = { ...searchFilters, \"o\": e.offset, \"l\": e.pagesize }\n setSearchFilters(sf);\n getCatalogues(false, sf);\n history.push({ pathname: path + objectToPath(sf) });\n }} count={results.row_count} />\n\n\n\n\n <div className=\"bc bcg2\">\n <conditional.true value={(!showDetails)}>\n\n <Table\n rowKey=\"list_id\"\n size=\"small\"\n columns={columns}\n loading={loading}\n className={\"fullTable\"}\n dataSource={results.rows}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n\n </conditional.true>\n <conditional.true value={(showDetails)}>\n <Spin spinning={loading}>\n <div style={{ \"padding\": \"20px\" }}>\n <conditional.true value={(results.rows.length < 1)}>\n <Empty description=\"No results.\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </conditional.true>\n {results.rows.map((item) => {\n return <div key={item.list_id}><Renderer><ListItem is_catalogue={true} getLists={getCatalogues} setResults={setResults} results={results} data={item} /></Renderer><div className=\"borderBottom shim\" style={{ \"margin\": \"35px -20px\", \"borderBottomWidth\": \"6px\" }} /></div>\n })}\n </div>\n </Spin>\n </conditional.true>\n </div>\n\n <Paginate save=\"catalogs_limit\" loading={loading} paginate={{ current: current, offset: (searchFilters.hasOwnProperty(\"o\")) ? searchFilters.o : 0, pagesize: (searchFilters.hasOwnProperty(\"l\")) ? searchFilters.l : 20 }} setPaginate={(e) => {\n setCurrent(e.current);\n let sf = { ...searchFilters, \"o\": e.offset, \"l\": e.pagesize }\n setSearchFilters(sf);\n getCatalogues(false, sf);\n history.push({ pathname: path + objectToPath(sf) });\n }} count={results.row_count} />\n\n </Layout.Content>\n </Layout>\n\n\n\n </>\n )\n\n}","import React from \"react\";\nimport { Form, Switch, Typography, Space } from \"antd\";\nimport conditional from \"../../utils/conditional\";\nexport default function WebstoreItem(props) {\n\n const {\n has_switch = true,\n disabled = false,\n disabledMsg = \"\",\n heading = \"\",\n description = \"\",\n value = false,\n name = \"\",\n warning = false,\n notice = \"\",\n onChange = null,\n } = props;\n\n\n const setOnChange = (e) =>{\n\n if(onChange){\n props.onChange(e);\n }\n \n }\n\n return (\n <>\n <Space align=\"start\" size={15}>\n <Form.Item valuePropName='checked' initialValue={value} name={name} noStyle>\n {(has_switch && <Switch disabled={disabled} onChange={(e) => setOnChange(e)} size=\"small\" />)}\n \n </Form.Item>\n {(!has_switch && <div style={{\"width\" : \"28px\"}}> </div>)}\n <div>\n <Typography.Title level={5}>{heading}</Typography.Title>\n <conditional.true value={(disabled && disabledMsg)}>\n <Typography.Paragraph type=\"danger\">{disabledMsg}</Typography.Paragraph>\n </conditional.true>\n <Typography.Paragraph type=\"secondary\">\n <conditional.true value={(notice)}>\n <Typography.Paragraph type={(warning) ? \"danger\" : \"secondary\"} ><em><strong>{notice}</strong></em></Typography.Paragraph>\n </conditional.true>\n {description}</Typography.Paragraph>\n </div>\n </Space>\n </>\n )\n\n}","import React from \"react\";\nimport { Layout, Form, Anchor, Card, Typography, Divider, Input, Button, Space } from \"antd\";\nimport WebstoreItem from \"../../layouts/Webstore/WebstoreItem\";\nimport ColorPicker from \"rc-color-picker\";\nimport 'rc-color-picker/assets/index.css';\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\n\nexport default function AppearancePage() {\n\n\n const drawColor = (_label, _color) => {\n\n return (\n <>\n <Space>\n <div style={{ width: \"100px\" }}>{_label}</div>\n <Input style={{ \"width\": \"70px\", \"fontSize\": \"12px\" }} value={_color} size=\"small\" />\n <div style={{ \"paddingTop\": \"5px\" }}><ColorPicker color={_color} enableAlpha={false} /></div>\n </Space>\n <div className=\"shim\" />\n </>\n )\n }\n\n return (\n <>\n\n\n <Layout className=\"layout\">\n\n <LayoutHeader\n todo\n title=\"Appearance\"\n description=\"Use this page configure website graphics and colours.\"\n button={<><Button size=\"small\" type=\"primary\"><small>Save settings</small></Button></>}\n />\n\n <Layout.Content style={{\"padding\": \"0px\" }} >\n <div style={{ \"height\": \"calc(100vh - 250px)\" }}>\n\n </div>\n </Layout.Content>\n\n\n </Layout>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Layout, Upload, Typography, Row, Col, Button, Divider, message } from \"antd\";\nimport 'rc-color-picker/assets/index.css';\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport { LoadingOutlined, PlusOutlined } from '@ant-design/icons';\nimport { useSession } from \"../../utils/Session\";\nimport { cacheBuster } from \"../../utils/Utils\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function BrandingPage() {\n\n const [session, setSesion] = useSession();\n const favicon_path = \"https://bookmanager.com/i/\" + session.webstore_name + \"/favicon.png\"\n const letterhead_path = \"https://bookmanager.com/i/\" + session.webstore_name + \"/letterhead_logo.jpg\"\n\n const UploadDirect = (props) => {\n\n const {name = \"\", accept = \"\"} = props; \n const [path, setPath] = useState(props.path + cacheBuster(true));\n const [fileList, setFileList] = useState([]);\n const [loading, setLoading] = useState(false);\n \n const handleUpload = (_f) => {\n let _location = \"/\" + name; \n setLoading(true)\n apiCall(\"files/upload\", { file: fileList[0], location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"File uploaded successfully.\")\n } else {\n message.error(\"Error: \" + _result.error);\n }\n setFileList([]);\n setPath(props.path + cacheBuster(true));\n setLoading(false);\n })\n }\n\n const onRemove = (_file) => {\n setFileList([]);\n }\n\n const beforeUpload = (_file) => {\n setFileList([_file]);\n return false;\n }\n\n const uploadButton = (\n <div>\n {loading ? <LoadingOutlined /> : <PlusOutlined />}\n <div style={{ marginTop: 8 }}>Upload</div>\n </div>\n );\n\n return (\n <Upload accept={accept} showUploadList={false} multiple={false} listType=\"picture-card\" onChange={(e) => handleUpload(e)} onRemove={(_file) => onRemove(_file)} beforeUpload={(_file) => beforeUpload(_file)}>\n {path ? <img onError={() => setPath(\"\")} src={path} alt=\"avatar\" style={{ maxWidth: '100%' }} /> : uploadButton}\n </Upload>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Branding\"\n description=\"Use this page configure branding images.\"\n button={<><Button size=\"small\" type=\"primary\"><small>Save settings</small></Button></>}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"minHeight\": \"calc(100vh - 250px)\" }}>\n <div style={{ \"padding\": \"20px\" }}>\n <Row gutter={[30, 30]}>\n <Col span={16}>\n <Typography.Title level={5}>Emailed Order Confirmation Header Graphic</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n Upload an image that will display at the top of emailed online order confirmations. This is typically your store logo. <br />Reccomended width of 500px. PNG or JPG files are accepted, with a maximum size of 1MB.\n </Typography.Paragraph>\n </Col>\n <Col span={8}>\n <UploadDirect accept=\".jpg\" name=\"letterhead_logo.jpg\" path={letterhead_path} />\n </Col>\n </Row>\n <Divider dashed />\n <Row gutter={[30, 30]}>\n <Col span={16}>\n <Typography.Title level={5}>Favicon Image</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n Upload an image to appear in the tabs of web browsers. The image will be automatically resized when it is displayed, but, depending on the browser and device, to varying dimensions. We recommend 32px by 32px\n </Typography.Paragraph>\n </Col>\n <Col span={8}>\n <UploadDirect accept=\".png\" name=\"favicon.png\" path={favicon_path} />\n </Col>\n </Row>\n {/* <Divider dashed />\n <Row gutter={[30, 30]}>\n <Col span={16}>\n <Typography.Title level={5}>PDF covers logo</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n Upload an image that will display on the cover page of PDFs generated on Biz. This is typically your store logo. Upload an image that is ????px wide, with a maximum height of ????px. PNG or JPG files are accepted, with a maximum size of 1MB.\n </Typography.Paragraph>\n </Col>\n <Col span={8}>\n <UploadDirect path={\"\"} />\n </Col>\n </Row> */}\n </div>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import { Select } from \"antd\";\nimport React from \"react\";\n\nexport default function FilterPresetPicker(props) {\n\n const { filters=[], presets = [], multiple = false, callback = () => {}, placeholder = \"Select presets...\" } = props\n\n\n\n const drawOptions = () => {\n \n return presets.map(item => {\n return(<Select.Option key={item.id} value={item.id}>{item.name}</Select.Option>)\n })\n }\n\n return(\n <Select defaultValue={filters} mode=\"multiple\" style={{\"width\" : \"100%\"}} onChange={(e) => callback(e)} placeholder={placeholder}>\n {drawOptions()}\n </Select>\n )\n\n\n}","import React, { useState } from \"react\";\nimport { Typography, Divider, Button, Layout, Upload, Spin, Table, Form, Space, AutoComplete, Select, message, Input } from \"antd\";\nimport { UploadOutlined, DeleteOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport Modal from \"antd/lib/modal/Modal\";\nimport FilterPresetPicker from \"./FilterPresetPicker\";\nexport default function TitleManager(props) {\n\n const { allowPresets = false, presets = [], form, form_key = \"\", preset_key = \"\", title = \"\", subtitle = \"\", bottom = false, setChanged = () => { } } = props;\n const [pending, setPending] = useState(\"\");\n const [titles, setTitles] = useState((props.titles) ? props.titles : []);\n const [filters, setFilters] = useState((props.filters) ? props.filters : []);\n const [fileUploaded, setFileUploaded] = useState(false);\n\n const [selectedPresets, setSelectedPresets] = useState([])\n\n const columns = [\n { title: <small></small>, dataIndex: 'eisbn', key: 'eisbn', width: 50, render: (e) => { return <img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"34px\", \"maxWidth\": \"30px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + e} /> } },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn', width: 150 },\n { title: <small>Title</small>, dataIndex: 'title', key: 'title', },\n {\n title: <small>Remove</small>, width: \"60px\", dataIndex: 'success', key: 'success', render: (e, f) => {\n return (<Button onClick={(e) => removeISBN(f.isbn)} type=\"link\" size=\"small\" danger ><small><DeleteOutlined /></small></Button>)\n }\n },\n ];\n\n const removeISBN = (_isbn) => {\n\n setChanged(true);\n let _titles = [...titles.filter(item => item.isbn !== _isbn)]\n form.setFieldsValue({ [form_key]: _titles });\n setTitles(_titles);\n }\n\n const addISBN = (_isbn) => {\n\n if (!_isbn) {\n return;\n }\n\n setChanged(true);\n\n let _eisbn = \"\";\n let _title = \"\";\n apiCall(\"title/getItem\", { isbn: _isbn }, (_s, _r) => {\n if (_r.hasOwnProperty(\"eisbn\") && _r.hasOwnProperty(\"title\")) {\n _eisbn = _r.eisbn;\n _title = _r.title;\n }\n let _titles = [...titles.filter(item => item.isbn !== _isbn)];\n _titles.push({\n isbn: _isbn,\n eisbn: _eisbn,\n title: _title\n });\n setPending(\"\");\n form.setFieldsValue({ [form_key]: _titles });\n setTitles(_titles);\n })\n }\n\n\n const [file, setFile] = useState();\n const [loading, setLoading] = useState(false);\n const [visible, setVisible] = useState(false);\n const [uploaded, setUploaded] = useState([])\n\n const uploadFile = (_file) => {\n setFile(_file);\n setLoading(true);\n let obj = {}\n obj.file = _file.file;\n apiCall(\"titlelist/parseFile\", obj, (_status, _result) => {\n if (_status) {\n setChanged(true);\n setUploaded(_result.titles);\n setFileUploaded(true);\n } else {\n\n }\n setVisible(true);\n setLoading(false);\n });\n }\n\n\n const closeModal = () => {\n setUploaded([]);\n setVisible(false)\n setModal(false);\n setFileUploaded(false);\n }\n\n const addImportToList = (_titles) => {\n\n let _current = [...titles];\n let _currentTotal = _current.length;\n _titles.forEach(element => {\n let _find = _current.find(item => item.isbn === element.isbn);\n if (!_find) {\n _current.push({\n isbn: element.isbn,\n title: element.title,\n eisbn: element.eisbn\n })\n }\n });\n\n if (_currentTotal === _current.length) {\n\n setVisible(false);\n setFileUploaded(false);\n setModal(false);\n setUploaded([]);\n message.error(\"No titles added\");\n } else {\n form.setFieldsValue({ [form_key]: _current });\n setChanged(true);\n setTitles(_current);\n setVisible(false);\n setFileUploaded(false);\n setModal(false);\n setUploaded([]);\n let _count = _current.length - _currentTotal;\n message.success(_count.toString() + \" titles added\");\n }\n\n }\n\n const [modal, setModal] = useState(false);\n\n const showInstructions = () => {\n return (<>\n\n <Layout className=\"layout\">\n <Layout.Content style={{ \"padding\": \"0px\", \"width\": \"auto\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={5}>Choose File... </Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n {(!fileUploaded && <>\n <Upload.Dragger accept=\".txt, .pdf, .xls, .xlsx, .html, .csv\" showUploadList={false} customRequest={(e) => uploadFile(e, false)} style={{ \"padding\": \"0px 20px\", \"height\": \"300px\" }}>\n <div >\n {(loading) ? <Spin style={{ height: \"35px\" }} /> : <UploadOutlined style={{ \"fontSize\": \"30px\", height: \"35px\" }} />}\n </div>\n <p className=\"ant-upload-text\">Click or drag to upload</p>\n <p className=\"ant-upload-hint\">\n Upload an Excel file (.xls or .xlsx), Text file (.txt) <br />or a tab-delimited file (.txt).\n </p>\n </Upload.Dragger>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setModal(false)}>Cancel</Button></div>\n <br clear=\"all\" />\n </>)}\n\n {(fileUploaded && <>\n\n <div>\n <Table locale={{ emptyText: \"No titles\" }} scroll={{ y: 255 }} className=\"tborder\" pagination={false} columns={columns.filter(item => item.key !== \"success\")} dataSource={uploaded} size=\"small\"></Table>\n <div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => closeModal()}>Cancel</Button>\n <Button disabled={!(uploaded.length > 0)} type=\"primary\" onClick={() => addImportToList(uploaded)}>Add</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n\n </>)}\n\n\n\n\n\n </div>\n </Layout.Content>\n </Layout>\n\n </>)\n }\n\n\n const filterCallback = (_presets) => {\n setChanged(true);\n setFilters(_presets);\n form.setFieldsValue({ [preset_key]: _presets });\n }\n\n return (\n <>\n <Modal footer={null} bodyStyle={{ \"padding\": \"0px\" }} visible={modal} onCancel={() => setModal(false)}>\n {showInstructions()}\n </Modal>\n <Form.Item noStyle name={form_key} initialValue={titles}></Form.Item>\n <Typography.Title level={5} >{title}</Typography.Title>\n <Typography.Paragraph type=\"secondary\">{subtitle}</Typography.Paragraph>\n {(allowPresets && <>\n <Form.Item noStyle name={preset_key} initialValue={filters} />\n <label>{title} Filter Presets</label>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <FilterPresetPicker callback={(e) => filterCallback(e)} multiple={true} filters={filters} presets={presets} />\n </>)}\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <div className=\"shim\" /><div className=\"shim\" />\n <label>{title} ISBNS</label>\n <div className=\"shim\" />\n <Input.Search onSearch={(e) => addISBN(e)} size=\"small\" enterButton={<small>Add ISBN</small>} placeholder=\"Add ISBN\" onChange={(e) => setPending(e.target.value)} value={pending} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Table locale={{ emptyText: \"No titles\" }} showHeader={false} scroll={{ y: 255 }} className=\"tableBorder\" pagination={false} columns={columns} dataSource={titles} size=\"small\"></Table>\n <div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setModal(true)} size=\"small\" type=\"primary\" icon={<UploadOutlined />}><small> Upload</small></Button></div>\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Button, Card, Tree, Row, Col, Table, Menu, Dropdown, Form, Modal, Upload, Input, message, Space, TreeSelect, Spin } from \"antd\";\nimport { SmileOutlined, DownOutlined, UploadOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport { bmDate, bytesToSize, ucfirst } from \"../utils/Utils\";\nimport { useHistory } from \"react-router-dom\";\n\n\nexport default function FileBrowser(props) {\n\n const { selectImage = () => { console.log(\"called\") } } = props;\n const [fileList, setFileList] = useState([]);\n const [uploading, setUploading] = useState(false);\n const [currentDirectory, setCurrentDirectory] = useState(\"/\");\n const [currentTitle, setCurrentTitle] = useState(\"Root\");\n const [filename, setFilename] = useState(\"\");\n const [selectedFile, setSelectedFile] = useState({});\n const [loading, setLoading] = useState(false)\n\n const onRemove = (_file) => {\n setFileList([]);\n }\n\n // disables auto sending file. \n const beforeUpload = (_file) => {\n setFileList([_file]);\n return false;\n }\n\n const handleUpload = (_f) => {\n let _name = fileList[0].name;\n let _ext = _name.split(\".\");\n _ext = _ext[_ext.length - 1];\n if (filename) { _name = filename + \".\" + _ext; }\n let _location = (currentDirectory === \"/\") ? currentDirectory + _name : currentDirectory + \"/\" + _name;\n setUploading(true);\n apiCall(\"files/upload\", { file: fileList[0], location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"File uploaded successfully.\")\n } else {\n message.error(\"Error: \" + _result.error);\n }\n setFileList([]);\n setUploading(false);\n setUploadVisible(false);\n fetchList();\n })\n }\n\n\n const removeFolder = () => {\n let _location = currentDirectory;\n apiCall(\"files/rmdir\", { location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"Folder removed successfully.\")\n } else {\n message.error(_result.error);\n }\n setFolderVisible(false);\n fetchList();\n });\n }\n\n const createFolder = (_f) => {\n let _location = currentDirectory + \"/\" + _f.folder;\n apiCall(\"files/mkdir\", { location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"Folder created successfully.\")\n } else {\n message.error(_result.error);\n }\n setFolderVisible(false);\n fetchList();\n });\n }\n\n const moveFile = (_f) => {\n let _from = selectedFile.path;\n let _to = _f.folder + \"/\" + selectedFile.name;\n apiCall(\"files/mv\", { from_location: _from, to_location: _to }, (_status, _result) => {\n if (_status) {\n message.success(\"File moved successfully.\")\n } else {\n message.error(_result.error);\n }\n closeMove();\n fetchList();\n })\n }\n\n\n const [moveVisible, setMoveVisible] = useState(false);\n\n const drawMoveBox = () => {\n\n return (\n <Modal destroyOnClose width={400} onCancel={() => closeMove()} visible={moveVisible} centered footer={null}>\n <Typography.Title level={5}>Move file</Typography.Title>\n <div style={{ \"marginTop\": \"-5px\", \"color\": \"#666\" }}><small>Move <strong>{currentTitle}</strong> to another directory</small></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Form onFinish={(e) => moveFile(e)} layout=\"vertical\">\n <div className=\"shim\" />\n <Form.Item rules={[{ required: true, message: \"Folder required.\" }]} label={<small>Folder name</small>} name=\"folder\">\n <TreeSelect treeDefaultExpandAll placeholder=\"Select directory...\" treeData={parseTree(results.files.tree)} />\n </Form.Item>\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => closeMove()}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Move</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </Modal>\n )\n\n }\n\n\n const download = (_path) => {\n var el = document.createElement(\"a\");\n el.setAttribute('download', \"\");\n el.target = \"_blank\"\n el.href = _path;\n document.body.appendChild(el);\n el.click();\n }\n\n\n\n\n const [folderVisible, setFolderVisible] = useState(false);\n const drawFolderBox = () => {\n\n return (\n <Modal destroyOnClose width={400} onCancel={() => setFolderVisible(false)} visible={folderVisible} centered footer={null}>\n <Typography.Title level={5}>New Folder</Typography.Title>\n <div style={{ \"marginTop\": \"-5px\", \"color\": \"#666\" }}><small>Create a new folder in the <strong>{currentTitle}</strong> directory</small></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Form onFinish={(e) => createFolder(e)} layout=\"vertical\">\n <div className=\"shim\" />\n <Form.Item rules={[{ required: true, message: \"Folder name required.\", pattern: new RegExp(/^[a-z0-9 ]+$/i) }]} label={<small>Folder name</small>} name=\"folder\">\n <Input placeholder=\"Folder name...\" />\n </Form.Item>\n <div style={{ \"float\": \"right\" }}>\n <Space>\n {/* <Button danger onClick={() => removeFolder()}>Delete</Button> */}\n <Button onClick={() => setFolderVisible(false)}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Create</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </Modal>\n )\n }\n\n const [uploadVisible, setUploadVisible] = useState(false);\n\n\n const closeUploadBox = () => {\n setFileList([]);\n setFilename(\"\");\n setUploadVisible(false)\n }\n\n const drawUploadBox = () => {\n\n return (\n <Modal destroyOnClose width={400} onCancel={() => closeUploadBox(false)} visible={uploadVisible} centered footer={null}>\n <Typography.Title level={5}>Upload file</Typography.Title>\n <div style={{ \"marginTop\": \"-5px\", \"color\": \"#666\" }}><small>Upload file to the <strong>{currentTitle}</strong> directory</small></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Form layout=\"vertical\">\n <div className=\"shim\" />\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }} >Renaming file is optional.</small>} label={<small>Rename File?</small>}>\n <Input value={filename} onChange={(e) => setFilename(e.target.value.replace(/[^\\w\\s]/gi, ''))} placeholder=\"New name...\" />\n </Form.Item>\n <br />\n <div style={{ \"float\": \"right\" }}>\n <Space align=\"start\">\n <Upload multiple={false} onRemove={(_file) => onRemove(_file)} beforeUpload={(_file) => beforeUpload(_file)}>\n <Button type=\"primary\" disabled={(fileList.length > 0)} icon={<UploadOutlined />}>Select file</Button>\n </Upload>\n <Button\n type=\"primary\"\n onClick={handleUpload}\n disabled={fileList.length === 0}\n loading={uploading}\n >\n {uploading ? 'Uploading' : 'Start upload'}\n </Button>\n </Space>\n </div>\n <Button onClick={() => closeUploadBox()}>Cancel</Button>\n <br clear=\"both\" />\n </Form>\n </Modal>\n )\n }\n\n const [results, setResults] = useState({ files: { path: \"\", tree: [] } });\n const [selected, setSelected] = useState([]);\n\n const columns = [\n { width: 10 },\n {\n title: <small>File</small>, dataIndex: 'name', key: 'name', sorter: { compare: (a, b) => a.name.localeCompare(b.name) }, render: (e) => {\n\n return <div style={{ \"maxWidth\": \"200px\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }}>{e}</div>\n }\n },\n {\n title: <small></small>, dataIndex: 'path', key: 'path', render: (e, f) => {\n if (f.hasOwnProperty(\"image\")) {\n return <a alt={f.name} href={window.sitesettings.file_url + \"/\" + e} target=\"_blank\"><img style={{ \"maxWidth\": \"50px\", \"maxHeight\": \"50px\" }} src={window.sitesettings.file_url + \"/\" + e} /></a>\n } else {\n return (<></>)\n }\n }\n },\n {\n title: <small>File size</small>, dataIndex: 'size', key: 'size', sorter: (a, b) => a.size - b.size, render: (e) => {\n return (e) ? bytesToSize(e) : \"\";\n }\n },\n {\n title: <small>Modified date</small>, dataIndex: 'last_modified', key: 'last_modified', sorter: (a, b) => a.last_modified - b.last_modified, render: (e) => {\n return (e) ? bmDate(e * 1000) : \"\"\n }\n },\n {\n title: <small>Dimensions</small>, dataIndex: 'image', key: 'image', render: (e) => {\n if (e) {\n return (e.width + \"px x\" + e.height + \"px\")\n }\n }\n },\n\n {\n title: <small><Button block onClick={() => setUploadVisible(true)} type=\"primary\" size=\"small\"><small>Upload</small></Button></small>, width: 68, dataIndex: 'actions', key: 'actions', render: (e, f) => {\n return <Button onClick={() => selectImage(f)} type=\"primary\" block><small>Select</small></Button>\n }\n }\n ]\n\n\n const openMove = (_f) => {\n setSelectedFile(_f);\n setMoveVisible(true)\n }\n\n const closeMove = () => {\n setSelectedFile({});\n setMoveVisible(false);\n }\n\n const deleteFile = (_f) => {\n\n apiCall(\"files/rm\", { location: _f.path }, (_status, _result) => {\n if (_status) {\n message.success(\"File deleted successfully.\");\n } else {\n message.error(_result.error);\n }\n setSelectedFile({});\n fetchList();\n })\n console.log();\n }\n\n\n\n const openDelete = (_f) => {\n\n setSelectedFile(_f);\n Modal.confirm({ icon: <></>, onOk: () => deleteFile(_f), okText: \"Delete\", okButtonProps: { danger: true }, title: \"Delete?\", content: <>Are you sure you wish to delete <strong>{_f.name}</strong>?</> });\n }\n\n\n\n const drawMenu = (e, f) => {\n return (\n <Menu>\n {(f.hasOwnProperty(\"image\") && <Menu.Item onClick={() => window.open(window.sitesettings.file_url + \"/\" + f.path, \"_blank\")}><small>View</small></Menu.Item>)}\n <Menu.Item onClick={() => download(window.sitesettings.file_url + f.path)}><small>Download</small></Menu.Item>\n <Menu.Item onClick={() => openMove(f)}><small>Move to...</small></Menu.Item>\n <Menu.Item onClick={() => openDelete(f)} danger ><small>Delete</small></Menu.Item>\n </Menu>\n )\n }\n\n\n const drawActions = (e, f) => {\n\n return (\n <>\n <Dropdown overlay={drawMenu(e, f)}>\n <Button block size=\"small\">\n <small>Actions...</small>\n </Button>\n </Dropdown>\n </>\n )\n }\n\n const fetchList = () => {\n setLoading(true);\n apiCall(\"files/ls\", { location: \"/\" }, (_status, _result) => {\n setLoading(false)\n if (_status) {\n setResults(_result);\n }\n \n })\n }\n\n useEffect(fetchList, []);\n\n\n const parseChildren = (_arr) => {\n return _arr.map(item => {\n return {\n title: item.name,\n key: item.path,\n items: (item.hasOwnProperty(\"children\")) ? item.children.filter(f => !f.is_directory) : [],\n children: (item.hasOwnProperty(\"children\")) ? parseChildren(item.children.filter(f => f.is_directory)) : []\n }\n })\n }\n\n const parseTree = (_arr) => {\n let _ret = {\n title: \"Root\",\n key: \"/\",\n items: _arr.filter(f => !f.is_directory),\n children: parseChildren(_arr.filter(f => f.is_directory))\n }\n return [_ret];\n }\n\n const parseSelection = (_children = [], _item) => {\n setCurrentDirectory(_item.key);\n setCurrentTitle(_item.title);\n setSelected(_item.items);\n }\n\n\n const findInArray = (_arr, _key, _val) => {\n\n let found = false;\n _arr.forEach(item => {\n if (item.hasOwnProperty(\"children\")) {\n\n let _search = findInArray(item.children, _key, _val);\n if (_search) {\n found = _search;\n }\n }\n if (item[_key] === _val) {\n found = item;\n }\n })\n return found;\n\n }\n\n const parseSelected = () => {\n\n let ret = findInArray(results.files.tree, \"path\", currentDirectory)\n\n\n if (ret) {\n return ret.children.filter(f => !f.is_directory);\n } else {\n\n if (currentDirectory === \"/\") {\n return results.files.tree.filter(f => !f.is_directory);\n }\n\n return [];\n }\n\n\n }\n\n return (\n <>\n {drawUploadBox()}\n {drawFolderBox()}\n {drawMoveBox()}\n <Spin spinning={loading}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <Row>\n <Col flex={\"250px\"}>\n <div className=\"folders\">\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setFolderVisible(true)} type=\"primary\" size=\"small\"><small>New Folder</small></Button></div>\n <small>Folders</small>\n </div>\n <div style={{ \"padding\": \"0px\" }}>\n <div className=\"shim\" />\n <Tree.DirectoryTree\n defaultExpandAll\n defaultSelectedKeys={[\"/\"]}\n className=\"tree\"\n onSelect={(e, f) => parseSelection(f.node.children, f.selectedNodes[0])}\n switcherIcon={<></>}\n treeData={parseTree(results.files.tree)}\n />\n </div>\n </Col>\n <Col className=\"bcg\" flex={\"1px\"}>\n </Col>\n <Col flex={\"auto\"}>\n <div style={{ \"borderBottom\": \"0px\" }}>\n <Table\n rowKey={\"path\"}\n rowClassName={\"hideHover\"}\n size=\"small\"\n columns={columns}\n dataSource={parseSelected()}\n />\n </div>\n </Col>\n </Row>\n </Card>\n </Spin>\n\n </>\n )\n}","import { Button, Card, Modal, Space } from \"antd\";\nimport React, { useState } from \"react\";\nimport { useSession } from \"../utils/Session\";\nimport { SelectOutlined, DeleteOutlined } from '@ant-design/icons';\nimport FileBrowser from \"./FileBrowser\";\nimport conditional from \"./conditional\";\nexport default function ImageSelect(props) {\n\n const { wrap = false, onChange = () => { } } = props;\n const [visible, setVisible] = useState(false);\n const [path, setPath] = useState({ path: (props.path) ? props.path : \"\" });\n const [session, setSession] = useSession();\n\n\n const selectImage = (_image) => {\n\n if (_image) {\n setPath({ path: \"/i/\" + session.webstore_name + _image.path });\n onChange(\"/i/\" + session.webstore_name + _image.path);\n } else {\n setPath({ path: \"\" });\n onChange(\"\");\n }\n\n setVisible(false);\n }\n\n return (\n <>\n <Modal title=\"Media Gallery\" footer={null} width={1000} visible={visible} onCancel={() => setVisible(false)}>\n <FileBrowser selectImage={selectImage} />\n </Modal>\n\n <conditional.true value={(wrap)}>\n <span onClick={() => setVisible(true)}>{props.children}</span>\n </conditional.true>\n\n <conditional.true value={!wrap}>\n <>\n <Space>\n <Card bodyStyle={{ \"padding\": \"5px\" }} className=\"img-pattern\" >\n <div style={{ \"minHeight\": \"50px\", \"width\": \"190px\", \"height\": \"100px\", \"display\": \"flex\", \"alignContent\": \"center\", \"cursor\": \"pointer\", \"backgroundRepeat\": \"no-repeat\", \"backgroundPosition\": \"center\", \"backgroundSize\": \"contain\", \"backgroundImage\": (path.path) ? \"url('https://cdn1.bookmanager.com/\" + path.path + \"')\" : \"none\" }}>\n <div>\n <div className={(path.path) ? \"img-select-hover\" : \"\"} style={{ \"position\": \"absolute\", \"width\": \"190px\", \"height\": \"100px\", \"textAlign\": \"center\", \"padding\": \"15px\" }}>\n <div style={{ \"marginTop\": \"20px\", \"color\": \"#aaa\" }}>\n <Space size={20}>\n <div onClick={() => setVisible(true)}><SelectOutlined /> Select</div>\n {(path.path && <div onClick={() => selectImage(\"\")} style={{ \"color\": \"#bb1717\" }}> <DeleteOutlined /> Remove</div>)}\n </Space>\n </div>\n </div>\n </div>\n </div>\n </Card>\n </Space>\n <div className=\"shim\" />\n </>\n </conditional.true>\n </>\n )\n}","import React, { useState, useRef, useEffect } from 'react';\nimport { Jodit } from 'jodit-react';\nimport { Modal } from 'antd';\nimport FileBrowser from \"../../utils/FileBrowser\";\nimport { useSession } from '../../utils/Session';\n\nexport default function TextEditor(props) {\n\n const { value = \"\", onChange = () => { } } = props;\n const editorRef = useRef(null);\n const [open, setOpen] = useState(false);\n const [joditInsance, setJoditInstance] = useState();\n const [session, setSession] = useSession(); \n const {webstore_name = \"\"} = session; \n\n let buttons = [\n { name: \"bold\" },\n { name: \"italic\" },\n { name: \"underline\" },\n { name: \"ul\", list: false },\n { name: \"ol\", list: false },\n { name: \"brush\", foreColor: false },\n { name: \"link\", noFollowCheckbox: false },\n { name: \"gallery\", iconURL: '/media/image.svg', exec: function (editor) { return setOpen(true); } }\n ];\n\n useEffect(() => {\n if (editorRef.current) {\n const jodit = new Jodit(editorRef.current, {\n placeholder: \"Type your text...\",\n toolbarButtonSize: \"small\",\n buttons: buttons,\n toolbarAdaptive: false,\n disablePlugins: [\"imageProperties\", \"paste\"],\n height: 300\n });\n\n jodit.events.on('paste', function (event) {\n event.preventDefault(); // Prevent the default paste action\n const clipboardData = event.clipboardData || window.clipboardData;\n const plainText = clipboardData.getData('text/plain');\n // Insert the plain text into the editor\n jodit.selection.insertHTML(plainText);\n });\n\n jodit.events.on('dblclick', function (event) {\n var target = event.target;\n // Check if the double-clicked element is an image\n if (target && target.tagName === 'IMG') {\n // Prevent the default context menu\n event.preventDefault();\n }\n });\n\n jodit.setEditorValue(value);\n jodit.events.on('change', (e) => {\n onChange(e)\n });\n setJoditInstance(jodit)\n }\n }, []);\n\n const callBack = (_img) => {\n setOpen(false)\n joditInsance.selection.insertHTML(\"<img class='bm-img' src='https://bookmanager.com/i/\" + webstore_name + _img.path + \"' />\")\n }\n\n return (\n <div>\n <Modal title=\"Media Gallery\" footer={null} width={1000} visible={open} onCancel={() => setOpen(false)}>\n <FileBrowser selectImage={callBack} />\n </Modal>\n <textarea ref={editorRef} />\n\n </div>\n );\n};\n\n","import React, { useState, useEffect } from \"react\";\nimport { Row, Col, Form, Upload, Typography, Divider, Space, Button, Switch, Input, DatePicker, message, Alert, Spin } from \"antd\";\nimport moment from \"moment\";\nimport 'moment-timezone';\nimport Editor from \"react-medium-editor\";\nimport TitleManager from \"../pages/settings/TitleManager\";\nimport { apiCall } from \"../utils/Api\";\nimport { PlusOutlined, DeleteOutlined, UndoOutlined } from '@ant-design/icons';\nimport ImageSelect from \"../utils/ImageSelect\"\nimport { useSession } from \"../utils/Session\";\nimport TextEditor from \"../components/utilities/TextEditor\";\n\n\nexport default function Event(props) {\n\n const { updateRow = () => { }, close = () => { }, create = false } = props;\n const [loading, setLoading] = useState(true);\n const [uploading, setUploading] = useState(false);\n const [flagRemoved, setFlagRemoved] = useState(false);\n const [imagePath, setImagePath] = useState(\"/temp\");\n const [ticket, setTicket] = useState(\"\");\n const [session, setSession] = useSession();\n\n const [event, setEvent] = useState(\n {\n event_created: 0,\n event_end: moment().add(1, \"day\").format(\"YYYY-MM-DD HH:mm:ss\"),\n event_id: 0,\n event_start: moment().format(\"YYYY-MM-DD HH:mm:ss\"),\n name: \"\",\n info: {\n description: \"\",\n img_path: \"\",\n isbns: [],\n tickets: [],\n length: 0,\n name: \"\",\n },\n on_expire: \"\",\n updated: 0,\n views: 0,\n visibility: 0,\n visible_after: moment().startOf('day').format(\"YYYY-MM-DD HH:mm:ss\"),\n }\n )\n\n const [form] = Form.useForm();\n\n\n const addTicket = (_isbn) => {\n if (!event.info.tickets.includes(_isbn)) {\n let _arr = [...event.info.tickets];\n _arr.push(_isbn);\n setEvent({ ...event, \"info\": { ...event.info, \"tickets\": _arr } })\n }\n }\n\n const removeTicket = (_isbn) => {\n let _arr = [...event.info.tickets];\n _arr = _arr.filter(itm => itm.toString() !== _isbn.toString())\n setEvent({ ...event, \"info\": { ...event.info, \"tickets\": _arr } })\n }\n\n\n const saveEvent = (_f) => {\n\n let obj = {\n name: _f.name,\n description: _f.description,\n on_expire: (_f.display_expired) ? \"display\" : \"archive\",\n }\n\n\n obj.start = _f.duration[0].format(\"YYYY-MM-DD HH:mm:ss\");\n obj.end = _f.duration[1].format(\"YYYY-MM-DD HH:mm:ss\");\n\n if (event.event_id) {\n obj.event_id = event.event_id;\n }\n\n obj.visible_after = _f.visible_after.startOf('day').format(\"YYYY-MM-DD HH:mm:ss\");\n\n if (event.info.tickets.length > 0) {\n obj.tickets = event.info.tickets.join();\n } else {\n obj.tickets = \"\";\n }\n\n if (_f.visibility) {\n obj.visibility = \"visible\";\n } else {\n obj.visibility = \"hidden\";\n }\n\n if (_f.titles) {\n obj.isbns = _f.titles.map(item => item.isbn);\n } else {\n obj.isbns = [];\n }\n\n if (event.info.img_path) {\n obj.img_path = event.info.img_path;\n } else {\n obj.img_path = \"\";\n }\n\n if (flagRemoved) {\n obj.img_path = \"\";\n }\n\n console.log(event);\n\n apiCall((create) ? \"events/add\" : \"events/edit\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Event saved successfully.\");\n if (flagRemoved) {\n removeImage();\n }\n\n updateRow(_result);\n close();\n } else {\n message.error(_result.error)\n }\n })\n }\n\n\n const getEvent = () => {\n\n if (!props.event_id) {\n setLoading(false);\n return;\n }\n\n apiCall(\"events/getDetails\", { event_id: props.event_id }, (_status, _result) => {\n if (_status) {\n // info has a variable object structure\n let _info = Object.assign({ ...event.info }, _result.info);\n _result.info = _info;\n setEvent(_result);\n }\n setLoading(false);\n })\n }\n\n useEffect(getEvent, [])\n\n const removeImage = () => {\n let _img = event.info.img_path.split(\"/\");\n _img = _img[_img.length - 1];\n\n apiCall(\"files/rm\", { location: \"/events_images/\" + _img }, (_status, _result) => {\n if (_status) {\n console.log(_result);\n setEvent({ ...event, \"info\": { ...event.info, \"img_path\": \"\" } })\n } else {\n message.error(\"There was an error.\")\n }\n })\n }\n\n const uploadImage = (_file) => {\n setUploading(true);\n apiCall(\"files/upload\", { location: \"/events_images/\" + _file.file.name, file: _file.file }, (_status, _result) => {\n if (_status) {\n setLoading(false);\n setEvent({ ...event, \"info\": { ...event.info, \"img_path\": _result.path } })\n } else {\n message.error(\"There was an error.\")\n }\n })\n }\n\n const updateImage = (_imgpath) => {\n setEvent({ ...event, \"info\": { ...event.info, \"img_path\": _imgpath } })\n }\n\n\n const drawEdit = () => {\n\n return (\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>{(create) ? \"Create new event\" : \"Edit event\"}</Typography.Title>\n <Divider />\n <Form form={form} onFinish={(_f) => saveEvent(_f)} layout=\"vertical\">\n\n\n <Row gutter={30}>\n\n <Col span={12}>\n <Form.Item initialValue={event.name} rules={[{ required: true, message: \"Event name required.\" }]} label=\"Event name\" name=\"name\">\n <Input placeholder=\"Event name...\" />\n </Form.Item>\n\n <Form.Item initialValue={[moment(event.event_start), moment(event.event_end)]} name=\"duration\" label=\"Date and Time\">\n <DatePicker.RangePicker style={{ \"width\": \"100%\" }} format=\"MMM Do YYYY - h:mma\" showTime />\n </Form.Item>\n </Col>\n\n <Col span={5}>\n\n <Form.Item initialValue={(event.visibility)} valuePropName=\"checked\" name=\"visibility\" label=\"Event visible?\">\n <Switch size=\"small\" />\n </Form.Item>\n\n <Form.Item initialValue={(event.on_expire === \"display\")} valuePropName=\"checked\" name=\"display_expired\" label=\"Display upon expiry?\">\n <Switch size=\"small\" />\n </Form.Item>\n\n </Col>\n\n <Col span={5}>\n <Form.Item initialValue={(event.visible_after) ? moment(event.visible_after) : \"\"} name=\"visible_after\" label=\"Visible from\">\n <DatePicker format=\"MMM Do YYYY\" />\n </Form.Item>\n </Col>\n\n </Row>\n\n <label for=\"duration\" class=\"\" title=\"Date and Time\">Description</label>\n <div className=\"shim\" />\n <TextEditor value={event.info.description} onChange={(e) => { form.setFieldsValue({ description: e }) }} />\n <br /><br />\n\n\n <Row gutter={30}>\n\n\n\n\n\n <Col span={12}>\n\n\n {/* <label>Event description</label>\n <div><p>Select text for formatting/linking options</p></div>\n <div className=\"ant-input\" style={{ \"padding\": \"10px\", \"borderRadius\": \"2px\", \"minHeight\": \"150px\", \"maxHeight\": \"150px\", \"overflow\": \"scroll\" }}>\n <Editor\n tag=\"p\"\n forcePlainText={true}\n text={event.info.description}\n onChange={(e) => {\n form.setFieldsValue({ description: e })\n }}\n options={{ toolbar: { buttons: ['bold', 'italic', 'underline', 'anchor'] } }}\n />\n </div>\n */}\n\n <Form.Item noStyle initialValue={event.info.description} name=\"description\" label=\"Event description\">\n <Input.TextArea hidden placeholder=\"Event description...\" rows={5} />\n </Form.Item>\n\n\n\n <TitleManager bottom={true} form={form} form_key={\"titles\"} titles={event.info.isbns.map(item => {\n return {\n isbn: item.isbn,\n eisbn: item.eisbn,\n title: item.title\n }\n })} title={<span style={{ \"fontSize\": \"14px\", \"fontWeight\": \"normal\" }}>Titles</span>} />\n\n </Col>\n\n <Col span={5}>\n\n\n <div className=\"ant-col ant-form-item-label\">Ticket(s)</div>\n\n {event.info.tickets.map((item, index) => {\n return (<Alert afterClose={(e) => removeTicket(item)} key={item} closable className=\"ticket\" message={<>{item}</>} />);\n })}\n {(event.info.tickets.length > 0 && <><div className=\"shim\" /><div className=\"shim\" /></>)}\n\n <Input.Search onChange={(e) => setTicket(e.target.value)} value={ticket} onSearch={(e) => {\n if(e){\n addTicket(e);\n setTicket(\"\")\n }\n \n }} size=\"small\" onKeyDown={(e) => { if (e.key === \"Enter\") { e.preventDefault(); e.stopPropagation(); } }} enterButton={<small style={{ \"fontSize\": \"9px\" }}><PlusOutlined /></small>} placeholder=\"Add ISBN\" />\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n\n </Col>\n <Col span={5}>\n <label>Event Poster/Author Image</label>\n\n <ImageSelect path={event.info.img_path} onChange={updateImage} />\n </Col>\n </Row>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close()}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Save</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </div>\n )\n }\n\n\n\n return (\n <>\n <Spin spinning={loading}>\n <div style={{ \"minHeight\": \"700px\" }}>\n {((!loading) && drawEdit())}\n </div>\n </Spin>\n </>\n )\n\n}","import { Popconfirm } from \"antd\";\nimport React from \"react\";\nimport { apiCall } from \"../utils/Api\";\nexport default function EventVisibilityToggle(props){\n\n const { event_id = 0, visibility = 0, updateRow = () => {}} = props; \n \n const toggle = () =>{\n\n let _vis = (visibility) ? \"hidden\" : \"visible\";\n\n apiCall(\"events/edit\", {event_id : event_id, visibility : _vis}, (_status, _result) => {\n if (_status) {\n updateRow(_result);\n }\n })\n }\n\n return(<Popconfirm onConfirm={() => toggle()} title={(visibility) ? \"Make event hidden?\" : \"Make event visible?\"}>{props.children}</Popconfirm>)\n\n\n \n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Popconfirm, message, Card } from \"antd\";\nimport { FormOutlined, DeleteOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport 'moment-timezone';\nimport Event from \"../../components/Event\";\nimport { apiCall } from \"../../utils/Api\";\nimport Paginate from \"../../components/Paginate\";\nimport Overlay from \"../../components/Overlay\";\nimport EventVisibilityToggle from \"../../components/EventVisibilityToggle\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\n\nexport default function EventsPage() {\n\n const [results, setResults] = useState({ events: [], total_rows: 0 });\n const [filters, setFilters] = useState({ current: 1, start: 0, limit: 20 });\n const [loading, setLoading] = useState(false);\n\n const getEvents = () => {\n setLoading(true);\n apiCall(\"events/get\", filters, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getEvents, [filters]);\n\n const deleteEvent = (_event_id) => {\n setLoading(true);\n apiCall(\"events/remove\", { event_id: _event_id }, (_status, _result) => {\n if (_status) {\n let _rows = results.events.filter(item => item.event_id !== _event_id);\n setResults({ ...results, \"events\": _rows });\n setLoading(false);\n message.success(\"Event deleted.\");\n }\n })\n }\n\n const updateRow = (_arg, _edit = true) => {\n let _events = [...results.events]\n if (_edit) {\n let _index = _events.findIndex(item => item.event_id === _arg.event_id);\n if (_index > -1) {\n _events[_index] = _arg;\n setResults({ ...results, \"events\": _events });\n }\n return;\n }\n return;\n }\n\n const columns = [\n {\n title: <small></small>, className: \"cellBorder\", width: \"0px\", dataIndex: 'id', key: 'id', render: (e, f) => {\n return (<Button size=\"small\" type=\"link\"><Overlay maskClosable={false} width={1000} component={<Event updateRow={updateRow} event_id={f.event_id} />}><FormOutlined /></Overlay></Button>)\n }\n },\n {\n title: <small></small>, dataIndex: 'top', width: \"10px\", key: 'top'\n },\n {\n title: <small>Event Name</small>, dataIndex: 'name', key: 'name', render: (e, f) => {\n return e;\n }\n },\n {\n title: <small>From</small>, dataIndex: 'event_start', key: 'event_start', render: (e) => {\n return moment(e).format(\"MMM Do YYYY - h:mma\");\n }\n },\n {\n title: <small>To</small>, dataIndex: 'event_end', key: 'event_end', render: (e) => {\n return moment(e).format(\"MMM Do YYYY - h:mma\");\n }\n },\n {\n title: <small>Visibility</small>, dataIndex: 'visibility', key: 'visibility', render: (e, f) => {\n return drawVisibility(e, f.event_id, f.visibility);\n }\n },\n { title: <small>Views</small>, dataIndex: 'views', key: 'views' },\n {\n title: <small>Updated</small>, dataIndex: 'updated', key: 'updated', render: (e) => {\n return moment(e).format(\"MMM Do YYYY - h:mma\");\n }\n },\n {\n title: <small></small>, className: \"cellBorder\", dataIndex: 'space', width: \"10px\", key: 'space'\n },\n {\n title: <small></small>, width: \"0px\", dataIndex: 'id', key: 'id', render: (e, f) => {\n return (<Popconfirm onConfirm={() => deleteEvent(f.event_id)} title=\"Delete event?\" ><Button danger size=\"small\" type=\"link\"><DeleteOutlined /></Button></Popconfirm>)\n }\n },\n ]\n\n const drawVisibility = (_bool, _event_id, _visibility) => {\n\n if (_bool) {\n return (<EventVisibilityToggle updateRow={updateRow} visibility={_visibility} event_id={_event_id}><div style={{ \"color\": \"#4dac13\" }}>Visible (Active)</div></EventVisibilityToggle>);\n } else {\n return (<EventVisibilityToggle updateRow={updateRow} visibility={_visibility} event_id={_event_id}><div style={{ \"color\": \"#f12a46\" }}>Hidden (Inactive)</div></EventVisibilityToggle>);\n }\n }\n\n\n return (\n\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Events\"\n description=\"Use this page to add, remove and manage events.\"\n button={<Button size=\"small\" type=\"primary\">\n\n <Overlay maskClosable={false} width={1000} component={<Event create={true} updateRow={getEvents} />}>\n <small>Create new event</small>\n </Overlay>\n\n </Button>}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <Paginate setPaginate={(e) => setFilters({ current: e.current, start: e.offset, limit: e.pagesize })} count={results.total_rows} paginate={{ current: filters.current, pagesize: filters.limit, offset: filters.start }} />\n <Table\n size=\"small\"\n pagination={false}\n loading={loading}\n rowKey=\"event_id\"\n className={\"tableNoBorder\"}\n columns={columns}\n dataSource={results.events}\n />\n <Paginate setPaginate={(e) => setFilters({ current: e.current, start: e.offset, limit: e.pagesize })} count={results.total_rows} paginate={{ current: filters.current, pagesize: filters.limit, offset: filters.start }} />\n </Card>\n </div>\n </Layout.Content>\n </Layout>\n )\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Layout, Typography, Divider, Space, Form, Radio, Input, Button, Table, Card, Tag, Checkbox, Row, Col, Modal, message, Tooltip } from \"antd\";\nimport Lists from \"../../components/lists/Lists\";\nimport ListCategories from \"../../components/lists/ListCategories\";\nimport { ShareAltOutlined, CloseOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../tools/conditional\";\nimport BusinessContactInfo from \"../../components/BusinessContactInfo\";\nexport default function Rep(props) {\n\n\n const [reason, setReason] = useState(\"\");\n const [expanded, setExpanded] = useState([]);\n const { updateRow = () => { }, data = {}, index = 0 } = props;\n\n // const {\n // relationship_id = \"\",\n // contact_id = \"\",\n // name = \"\",\n // email = \"\",\n // city = \"\",\n // province = \"\",\n // status = \"\",\n // is_my_rep = false,\n // declined_reason = null,\n // companies_represented = []\n // } = data;\n\n\n const {\n contact_id = \"\",\n name = \"\",\n san = \"\",\n email = \"\",\n city = \"\",\n province = \"\",\n share_relationship_info = {\n relationship_id: \"\",\n status: \"\",\n declined_reason: null\n },\n companies_represented = [\n {\n contact_id: \"\",\n name: \"\",\n country: \"\",\n province: \"\",\n city: \"\",\n email: \"\",\n category: \"\"\n }\n ]\n } = data;\n\n\n\n\n\n const columns = [\n { title: <small></small>, dataIndex: 'space', key: 'space', width: \"110px\" },\n {\n title: <small>Name</small>, dataIndex: 'name', key: 'name', render: (e, f) => {\n return (<strong><a onClick={() => expandCell(f)}>{e}</a></strong>)\n }\n },\n { title: <small>Category</small>, dataIndex: 'category', key: 'category', width: \"200px\" },\n { title: <small>Email</small>, dataIndex: 'email', key: 'email', width: \"300px\" },\n { title: <small>City</small>, dataIndex: 'city', key: 'city', width: \"100px\" },\n { title: <small>Province</small>, dataIndex: 'province', key: 'province', width: \"30px\" },\n { title: <small>Country</small>, dataIndex: 'country', key: 'country', width: \"80px\" },\n\n ]\n\n\n const drawChildTable = (_record) => {\n return (\n <>\n <div className=\"hideHover\" style={{ \"margin\": \"-8px -7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"1px solid #eee\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n\n {/* <div style={{\"fontWeight\" : \"600\", \"display\" : \"inline\", \"lineHeight\" : \"24px\", \"marginLeft\" : \"20px\", \"fontSize\" : \"11px\"}} >{_record.name}</div> */}\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 12px\" }}>\n <BusinessContactInfo id={_record.contact_id} />\n </div>\n </div>\n </>\n );\n }\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.contact_id)) {\n setExpanded([_data.contact_id]);\n } else {\n setExpanded([]);\n }\n }\n\n\n const approveRequest = () => {\n apiCall(\"rep_control/answerRequest\", { contact_id: contact_id, approved: true }, (_status, _result) => {\n if (_status) {\n updateRow(_result);\n }\n setReason(\"\");\n });\n }\n\n const confirmDeclineRequest = () => {\n apiCall(\"rep_control/answerRequest\", { contact_id: contact_id, reason: reason, approved: false }, (_status, _result) => {\n if (_status) {\n updateRow(_result);\n }\n setReason(\"\");\n });\n }\n\n\n const declineRequest = () => {\n Modal.confirm({\n icon: <></>,\n okText: \"Decline\",\n onOk: () => confirmDeclineRequest(),\n okButtonProps: { danger: true },\n title: \"Attention!\",\n content: <>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n You have chosen to decline <strong>{name}'s</strong> request to share with your store as a rep.\n <br /><br />\n Please leave a comment below as to why you are declining this share request: <small><em style={{ \"color\": \"#666\" }}> (not mandatory, but recommended)</em></small>\n <br /><br />\n <Input.TextArea placeholder=\"Type your comment here\" onChange={(e) => setReason(e.target.value)} />\n </>\n })\n }\n\n\n const drawStatus = (_status, _my_rep) => {\n\n\n // if (_my_rep) {\n // return <Checkbox checked disabled />\n // }\n\n let ret = \"\";\n switch (_status) {\n case \"approved\":\n ret = <Tooltip title=\"Remove as rep\"><Tag className=\"tag-btn\" onClick={() => declineRequest()} color=\"#78c042\"><strong><ShareAltOutlined /></strong></Tag></Tooltip>\n break;\n\n case \"requested\":\n ret = <Space size={0}>\n <Tooltip title=\"Approve rep request\"><Tag className=\"tag-btn\" onClick={() => approveRequest()} color=\"#e77e21\"><strong><ShareAltOutlined /></strong></Tag></Tooltip>\n <Tooltip title=\"Decline rep request\"><Tag className=\"tag-btn\" onClick={() => declineRequest()} color=\"#f12a46\"><strong><CloseOutlined /></strong></Tag></Tooltip>\n </Space>\n break;\n\n case \"rerequested\":\n ret = <Space size={0}>\n <Tooltip title=\"Approve rep request\"><Tag className=\"tag-btn\" onClick={() => approveRequest()} color=\"#8f3fe4\"><strong><ShareAltOutlined /></strong></Tag></Tooltip>\n <Tooltip title=\"Decline rep request\"><Tag className=\"tag-btn\" onClick={() => declineRequest()} color=\"#f12a46\"><strong><CloseOutlined /></strong></Tag></Tooltip>\n </Space>\n break;\n\n case \"declined\":\n ret = <Tooltip title=\"Approve rep request\"><Tag className=\"tag-btn\" onClick={() => approveRequest()} color=\"#f12a46\"><strong><ShareAltOutlined /></strong></Tag></Tooltip>\n break;\n\n default:\n ret = <> <Checkbox checked disabled /></>\n break;\n }\n\n return ret;\n\n }\n\n\n\n return (\n <div style={{ \"margin\": \"5px -20px\" }}>\n\n <Card className=\"bc bcg c rep\" size=\"small\" headStyle={{ \"border\": \"none\" }} style={{ \"padding\": \"10px 0px\", \"border\": \"none\" }} title={<>\n <Space size={0}>\n <div style={{ \"width\": \"100px\" }}>\n <Space size={0}>\n <div>  </div>\n <div style={{ \"width\": \"35px\" }}>\n {drawStatus(share_relationship_info.status)}\n </div>\n </Space>\n </div>\n </Space>\n <div style={{ \"float\": \"right\", \"fontSize\": \"11px\", \"fontWeight\": \"normal\", \"width\": \"210px\", \"marginRight\": \"-15px\" }}>\n <Row>\n <Col flex={\"100px\"}>\n <span className=\"c\">{city}</span>\n </Col>\n <Col flex={\"30px\"}>\n <span className=\"c\">{province}</span>\n </Col>\n <Col flex={\"80px\"}>\n\n </Col>\n </Row>\n </div>\n <span className=\"c\">{name} - <a href={\"mailto:\" + email} >{email}</a></span></>}>\n <div style={{ \"margin\": \"-8px -12px\" }}>\n <Row>\n <Col flex={\"auto\"}>\n <conditional.true value={(companies_represented.length > 0)}>\n <Table\n className=\"transparentTable\"\n rowClassName={\"hideHover\"}\n size=\"small\"\n pagination={false}\n dataSource={companies_represented}\n showHeader={false}\n columns={columns}\n rowKey=\"contact_id\"\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n\n />\n </conditional.true>\n </Col>\n </Row>\n\n </div>\n </Card>\n\n </div>\n )\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Layout, Typography, Divider, Space, Form, Radio, Input, Button, Table, Card, Tag, Checkbox, Row, Col, Modal } from \"antd\";\nimport Lists from \"../../components/lists/Lists\";\nimport ListCategories from \"../../components/lists/ListCategories\";\nimport { ShareAltOutlined, CloseOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../tools/conditional\";\nimport Rep from \"./Rep\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport { useHistory } from \"react-router-dom\";\nexport default function MyReps() {\n\n const history = useHistory(); \n const [selectedFilters, setSelectedFilters] = useState({ term: (history.location.state) ? history.location.state : \"\", filter: \"all\" });\n const [categories, setCategories] = useState({ selected: {}, menu: {} });\n const [results, setResults] = useState([]);\n\n const fetchAll = (_term = selectedFilters.term) => {\n\n let _sel = selectedFilters.filter\n let _obj = {\n my_reps: (_sel === \"my_reps\" || _sel === \"all\") ? true : false,\n approved: (_sel === \"approved\" || _sel === \"all\") ? true : false,\n pending: (_sel === \"pending\" || _sel === \"all\") ? true : false,\n declined: (_sel === \"declined\" || _sel === \"all\") ? true : false,\n }\n\n if (_term) {\n _obj.filter = _term;\n }\n\n apiCall(\"rep_control/getAll\", _obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n })\n }\n\n useEffect(fetchAll, [selectedFilters.filter, history.location.state]);\n\n\n const columns = [\n {\n title: <small>Name</small>, dataIndex: 'name', key: 'name', render: (e) => {\n return (<strong><a>{e}</a></strong>)\n }\n },\n { title: <small>Category</small>, dataIndex: 'category', key: 'category', width: \"200px\" },\n { title: <small>Email</small>, dataIndex: 'email', key: 'email', width: \"300px\" },\n { title: <small>City</small>, dataIndex: 'city', key: 'city', width: \"100px\" },\n { title: <small>Province</small>, dataIndex: 'province', key: 'province', width: \"30px\" },\n { title: <small>Country</small>, dataIndex: 'country', key: 'country', width: \"80px\" },\n\n\n ]\n\n\n const getStarted = () => {\n\n Modal.info({\n width: \"650px\", icon: <></>, title: \"Getting started\", content: <div style={{ \"height\": \"calc(100vh - 300px)\", \"overflow\": \"auto\", \"paddingRight\": \"10px\" }}>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <p>Reps listed on this page have selected your store as one they service. Below their name is the Pubstock company (or companies) that they represent.</p>\n <p>If the rep you want to share with is not listed on this page, you need to contact them. Many reps may be familiar with how to start this connection process, otherwise feel free to have them contact Bookmanager, and we'll be more than happy to walk them through it.</p>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <p>Reps with a grey checkmark <nobr className=\"noInteract\"><Checkbox checked disabled /></nobr> next to their name indicate that that they are sharing lists, titles, and/or catalogues with you. These reps do not do not have access to see your inventory info.</p>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <p>Reps with a green share <nobr className=\"noInteract\"><Tag style={{ \"marginRight\": \"0px\" }} color=\"#78c042\"><strong><ShareAltOutlined style={{ \"color\": \"#fff\" }} /></strong></Tag></nobr> are sharing lists and catalogues with you; and you are sharing your store data with them. If you have a good working relationship with a rep, sharing your store's inventory info (sales, on hand, order quantities) can help them do a better job of ensuring that you are not missing important opportunities. <strong className=\"c\">A rep can only see information on the titles that they represent.</strong> And only reps that have the green share icon can see your data.</p>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <p>Reps listed with an orange share <nobr className=\"noInteract\"><Tag style={{ \"marginRight\": \"0px\" }} color=\"#e77e21\"><strong><ShareAltOutlined style={{ \"color\": \"#fff\" }} /></strong></Tag></nobr> have requested to be connected with your store and your inventory data, but need approval from you first. These reps are presently only able to share lists, titles, and/or catalogues with you. If you want to decline the share request, simply click the red X <nobr className=\"noInteract\"><Tag style={{ \"marginRight\": \"0px\" }} color=\"#f12a46\"><strong><CloseOutlined style={{ \"color\": \"#fff\" }} /></strong></Tag></nobr> next to their name, and you can then click to \"hide\" them from this list.</p>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <p>Reps listed with a purple share <nobr className=\"noInteract\"><Tag style={{ \"marginRight\": \"0px\" }} color=\"#8f3fe4\"><strong><ShareAltOutlined style={{ \"color\": \"#fff\" }} /></strong></Tag></nobr> indicate that this request has been sent more than once. These reps are presently only able to share lists, titles, and/or catalogues with you. If you want to decline the share request, simply click the red X <nobr className=\"noInteract\"><Tag style={{ \"marginRight\": \"0px\" }} color=\"#f12a46\"><strong><CloseOutlined style={{ \"color\": \"#fff\" }} /></strong></Tag></nobr> next to their name, and you can then click to \"hide\" them from this list.</p>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <p>Please contact <a href=\"mailto:mail@bookmanager.com\">mail@bookmanager.com</a> | 250.763.4415 if you have any questions about sharing with your reps, and the data that is visible.</p>\n </div>\n })\n }\n\n\n\n\n const drawItems = () => {\n return results.map((item, index) => {\n return <Rep updateRow={updateRow} index={index} data={item} />\n })\n }\n\n const updateRow = (_item) => {\n let _update = [...results];\n let _index = _update.findIndex(itm => itm.contact_id === _item.contact_id);\n _update[_index] = _item;\n setResults(_update);\n }\n\n return (\n <>\n\n <Layout style={{ \"backgroundColor\": \"#fff\" }}>\n\n\n <LayoutHeader\n title=\"My Reps\"\n filters={\n <Form size=\"small\" layout=\"vertical\">\n <Space>\n <Form.Item initialValue={(history.location.state) ? history.location.state : \"\"} label={<small>Keyword Search</small>} name=\"keyword_search\">\n <Input.Search onSearch={(e) => fetchAll(e)} allowClear enterButton placeholder=\"Search for a rep\" style={{ \"width\": \"350px\" }} />\n </Form.Item>\n <Form.Item label={<small>Show</small>}>\n <Radio.Group onChange={(e) => setSelectedFilters({ ...selectedFilters, \"filter\": e.target.value })} defaultValue={\"all\"} buttonStyle=\"solid\">\n <Radio.Button value=\"all\"><small>All</small></Radio.Button>\n <Radio.Button value=\"my_reps\"><small>My Reps</small></Radio.Button>\n <Radio.Button value=\"pending\"><small>Share requested</small></Radio.Button>\n <Radio.Button value=\"approved\"><small>Shared</small></Radio.Button>\n <Radio.Button value=\"declined\"><small>Share declined</small></Radio.Button>\n </Radio.Group>\n </Form.Item>\n <Form.Item label={<small> </small>}>\n <Button type=\"text\" onClick={() => getStarted()}><small><InfoCircleOutlined /> Getting started</small></Button>\n </Form.Item>\n </Space>\n <br clear=\"both\" />\n </Form>\n }\n />\n\n <Layout.Content className=\"layoutHeader\" style={{\"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"0px 20px\", \"marginTop\": \"-6px\", \"marginBottom\": \"-6px\" }}>\n <>\n <div style={{\"padding\" : \"20px\"}}>\n {drawItems()}\n </div>\n </>\n </div>\n </Layout.Content>\n </Layout>\n\n </>\n )\n}","import React from \"react\";\nimport { Layout, Typography, Divider, Button } from \"antd\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\n\nexport default function SiteContentPage() {\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n todo\n title=\"Site Content\"\n description=\"Use this page to manage site content.\"\n />\n <Layout.Content style={{\"padding\": \"0px\" }} >\n <div style={{ \"height\": \"calc(100vh - 250px)\" }}>\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React from \"react\";\nimport { Layout, Typography, Divider } from \"antd\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\n\nexport default function SitePagesPage() {\n\n return (\n <>\n\n <Layout className=\"layout\">\n <LayoutHeader\n todo\n title=\"Site Pages\"\n description=\"Use this page to manage site pages.\"\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"height\": \"calc(100vh - 250px)\" }}>\n\n </div>\n </Layout.Content>\n </Layout>\n\n </>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Layout, Typography, Divider, Table, Space, Button, DatePicker, Form, Card, Row, Col, Statistic, Tooltip, Alert } from \"antd\";\nimport { FilePdfOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport { apiCall, apiDownload } from \"../utils/Api\";\nimport { addCommas, bmDate } from \"../utils/Utils\";\nimport conditional from \"../utils/conditional\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\n\nexport default function GiftcardActivityPage() {\n\n const [filters, setFilters] = useState({ start_date: moment().add(-1, \"year\"), end_date: moment() })\n const [loading, setLoading] = useState(false);\n const [results, setResults] = useState({\n years: [],\n totals: {\n \"active\": 0,\n \"transactions\": 0,\n \"under_count\": 0,\n \"over_count\": 0,\n \"over_dollars\": \"0\",\n \"issued_dollars\": \"0\",\n \"redeemed_todate_dollars\": \"0\",\n \"redeemed_year_dollars\": \"0\",\n \"outstanding_dollars\": \"0\",\n \"avg_over_dollars\": \"0\",\n \"redeemed_todate_percent\": \"0\",\n \"outstanding_percent\": \"0\",\n \"redeemed_year_percent\": \"0\"\n },\n liability: {\n \"issued_to_date\": \"0\",\n \"redeemed_to_date\": \"0\",\n \"issued_in_range\": \"0\",\n \"redeemed_in_range\": \"0\",\n \"issued_before_range\": 0,\n \"outstanding_cards\": 0,\n \"redeemed_before_range\": 0,\n \"min_activity_ts\": \"\",\n \"max_redeem_ts\": \"\"\n }\n });\n\n const getBillingReport = () => {\n apiDownload({ start_ts: filters.start_date.unix(), end_ts: filters.end_date.unix() }, \"giftcard/getBillingReport\");\n }\n\n const getLoadReport = () => {\n apiDownload({ start_ts: filters.start_date.unix(), end_ts: filters.end_date.unix() }, \"giftcard/getLoadReport\")\n }\n\n const columns = [\n {},\n { title: <small>Year</small>, dataIndex: 'year', key: 'year' },\n { title: <div className=\"ar\"><small>Active cards</small></div>, dataIndex: 'active', key: 'active', render: (e) => (!e) ? \"\" : <div className=\"ar\">{addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>Transactions</small></div>, dataIndex: 'transactions', key: 'transactions', render: (e) => (!e) ? \"\" : <div className=\"ar\">{addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>Loads <= $10</small></div>, dataIndex: 'under_count', key: 'under_count', render: (e) => (!e) ? \"\" : <div className=\"ar\">{addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>Loads > $10</small></div>, dataIndex: 'over_count', key: 'over_count', render: (e) => (!e) ? \"\" : <div className=\"ar\">{addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>Avg $10+ loads</small></div>, dataIndex: 'avg_over_dollars', key: 'avg_over_dollars', render: (e) => (!e) ? \"\" : <div className=\"ar\">${e}</div> },\n { title: <div className=\"ar\"><small>Issued</small></div>, dataIndex: 'issued_dollars', key: 'issued_dollars', render: (e) => (!e) ? \"\" : <div className=\"ar\"><strong>${addCommas(e)}</strong></div> },\n { title: <div className=\"ar\"><small>Redeemed to date</small></div>, dataIndex: 'redeemed_todate_dollars', key: 'redeemed_todate_dollars', render: (e) => (!e) ? \"\" : <div style={{ \"color\": \"#f12a46\" }} className=\"ar\">${addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>% of issued</small></div>, dataIndex: 'redeemed_todate_percent', key: 'redeemed_todate_percent', render: (e) => (!e) ? \"\" : <div className=\"ar\">{e}%</div> },\n { title: <div className=\"ar\"><small>Outstanding</small></div>, dataIndex: 'outstanding_dollars', key: 'outstanding_dollars', render: (e) => (!e) ? \"\" : <div className=\"ar\">${addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>% of issued</small></div>, dataIndex: 'outstanding_percent', key: 'outstanding_percent', render: (e) => (!e) ? \"\" : <div className=\"ar\">{e}%</div> },\n { title: <div className=\"ar\"><small>Redeemed in past year</small></div>, dataIndex: 'redeemed_year_dollars', key: 'redeemed_year_dollars', render: (e) => (!e) ? \"\" : <div className=\"ar\">${addCommas(e)}</div> },\n { title: <div className=\"ar\"><small>% of issued</small></div>, dataIndex: 'redeemed_year_percent', key: 'redeemed_year_percent', render: (e) => (!e) ? \"\" : <div className=\"ar\">{e}%</div> },\n {},\n ]\n\n const getActivity = () => {\n setLoading(true)\n apiCall(\"giftcard/getActivity\", {}, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getActivity, []);\n\n const getData = () => {\n\n let _data = [...results.years];\n _data.reverse();\n _data.push({});\n let _totals = { ...results.totals };\n _totals.year = \"Totals:\"\n _data.push(_totals);\n\n return _data;\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Gift Card Activity\"\n filters={<><Form>\n <Space wrap size={[5, 0]}>\n <Form.Item initialValue={[filters.start_date, filters.end_date]} name=\"range\" label=\"Date and Time\" noStyle>\n <DatePicker.RangePicker onChange={(e) => setFilters({ ...filters, \"start_date\": e[0], \"end_date\": e[1] })} className=\"inputsmall\" size=\"small\" style={{ \"width\": \"100%\" }} format=\"MMM Do YYYY\" />\n </Form.Item>\n <Button onClick={() => getBillingReport()} size=\"small\" type=\"primary\"><small><FilePdfOutlined /> Billing report</small></Button>\n <Button onClick={() => getLoadReport()} size=\"small\" type=\"primary\"><small><FilePdfOutlined /> Loaded cards</small></Button>\n </Space>\n </Form><br /></>}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>History</Typography.Title>\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <Table\n loading={loading}\n size=\"small\"\n header={<>Header</>}\n pagination={false}\n columns={columns}\n dataSource={getData()}\n />\n </Card>\n <br />\n <conditional.true value={(!loading && results.years.length > 0)}>\n\n {(results.liability.issued_in_range === \"0.00\" &&\n <><Alert message={\"We need minimum three years worth of gift card activity to provide usage predictions. Please contact Bookmanager support if you need guidance on manually assessing the predicted redemptions for gift cards with balances.\"} /><br /></>\n )}\n <Space size={16} align=\"start\" wrap>\n <div style={{ \"width\": \"398px\" }}>\n <Typography.Title level={5}>Summary</Typography.Title>\n <Card className=\"bc c\" bodyStyle={{ \"padding\": \"10px 20px\", \"minHeight\": \"85px\" }}>\n <div><span className=\"mid\">${addCommas(results.totals.issued_dollars)}</span> loaded on <span className=\"mid\">{addCommas(results.totals.active)}</span> cards since inception</div>\n <div><span className=\"mid\">${addCommas(results.totals.outstanding_dollars)}</span> outstanding on <span className=\"mid\">{addCommas(results.liability.outstanding_cards)}</span> cards (<span className=\"mid\">${(results.totals.outstanding_dollars / results.liability.outstanding_cards || 0).toFixed(2)}</span> per card)</div>\n </Card>\n </div>\n\n {(results.liability.issued_in_range !== \"0.00\" &&\n <div style={{ \"width\": \"768px\" }}>\n <Typography.Title level={5}>Predictions </Typography.Title>\n <Card className=\"bc c\" bodyStyle={{ \"padding\": \"10px 20px\", \"minHeight\": \"85px\" }}>\n <div>Between <span className=\"mid\">{bmDate(results.liability.min_activity_ts * 1000)} </span><sup style={{ \"color\": \"#aaa\", \"cursor\": \"pointer\" }}><Tooltip title=\"Date of earliest card activity with Bookmanager\"><InfoCircleOutlined /></Tooltip></sup> and <span className=\"mid\">{bmDate(results.liability.max_redeem_ts * 1000)}</span>, <sup style={{ \"color\": \"#aaa\", \"cursor\": \"pointer\" }}><Tooltip title=\"3 years before today's date\"><InfoCircleOutlined /></Tooltip></sup> <span className=\"mid\">${addCommas(results.liability.issued_in_range)}</span> was issued and <span className=\"mid\">${addCommas(results.liability.redeemed_in_range)}</span> of that was redeemed (<span className=\"mid\">{Math.round((results.liability.redeemed_in_range / results.liability.issued_in_range) * 100) || 0}%</span>)</div>\n <div>It is expected that of the <span className=\"mid\">${addCommas(results.liability.issued_to_date)}</span> issued since <span className=\"mid\">{bmDate(results.liability.min_activity_ts * 1000)} </span>, <span className=\"mid\">${addCommas(Math.round(results.liability.issued_to_date * (results.liability.redeemed_in_range / results.liability.issued_in_range)) || 0)}</span> or <span className=\"mid\">{Math.round((results.liability.redeemed_in_range / results.liability.issued_in_range) * 100) || 0}%</span> of that will eventually be redeemed.</div>\n <div>For the cards issued after <span className=\"mid\">{bmDate(results.liability.min_activity_ts * 1000)} </span>, <span className=\"mid\">${addCommas(results.liability.redeemed_to_date)}</span> has been redeemed, leaving <span className=\"mid\">${addCommas(Math.round(results.liability.issued_to_date * (results.liability.redeemed_in_range / results.liability.issued_in_range) - results.liability.redeemed_to_date) || 0)}</span> still expected.</div>\n </Card>\n </div>\n )}\n\n {(results.liability.issued_in_range !== \"0.00\" &&\n <div style={{ \"width\": \"398px\" }}>\n <Typography.Title level={5}>Prediction Summary</Typography.Title>\n <Card className=\"bc c\" style={{ width: \"400px\" }} bodyStyle={{ \"padding\": \"10px 20px\", \"minHeight\": \"135px\" }}>\n <div><span className=\"mid\">${addCommas(Math.round(results.liability.issued_to_date))}</span> (<span className=\"mid\">100%</span>) has been issued since <span className=\"mid\">{bmDate(results.liability.min_activity_ts * 1000)} </span></div>\n <div><span className=\"mid\">${addCommas(Math.round(results.liability.redeemed_to_date))}</span> (<span className=\"mid\">{Math.round((results.liability.redeemed_to_date / results.liability.issued_to_date || 0) * 100)}%</span>) of this has been redeemed</div>\n <div><span className=\"mid\">${addCommas(Math.round(results.liability.issued_to_date * ((100 - Math.round((results.liability.redeemed_in_range / results.liability.issued_in_range || 0) * 100)) / 100)))}</span> (<span className=\"mid\">{100 - Math.round((results.liability.redeemed_in_range / results.liability.issued_in_range || 0) * 100)}%</span>) of this is likely never to be redeemed</div>\n <div><span className=\"mid\">${addCommas(Math.round(results.liability.issued_to_date * (results.liability.redeemed_in_range / results.liability.issued_in_range || 0) - results.liability.redeemed_to_date))}</span> (<span className=\"mid\">{Math.round(((results.liability.issued_to_date * (results.liability.redeemed_in_range / results.liability.issued_in_range || 0) - results.liability.redeemed_to_date) / results.liability.issued_to_date || 0) * 100)}%</span>) of this is expected to be redeemed (this is your expected giftcard liability)</div>\n </Card>\n </div>\n )}\n <div style={{ \"width\": \"768px\" }}>\n <Typography.Title level={5}>Disclaimer</Typography.Title>\n <Card className=\"bc c\" bodyStyle={{ \"padding\": \"10px 20px\", \"minHeight\": \"135px\" }}>\n <div>These figures are provided to assist in estimating your liability and profit from unredeemed cards. However, the formulas used are highly sensitive to extraordinary circumstances and changes in your business practices over time. As such, these predictions could be grossly inaccurate and unsuitable for business valuation. Use them at your own risk.</div>\n </Card>\n </div>\n </Space>\n\n </conditional.true>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Layout, Space, Form, Button, Table, Input, message, Popconfirm, Tooltip } from \"antd\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiCall } from \"../utils/Api\";\nimport moment from \"moment\";\nimport { parseAuthorsPlain } from \"../utils/Utils\";\nimport conditional from \"../tools/conditional\";\nimport { WarningOutlined } from '@ant-design/icons';\n\nexport default function ManageCustomers() {\n\n const [loading, setLoading] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [results, setResults] = useState({ carts: [] })\n\n const searchUser = (_email) => {\n if (!_email) {\n setResults({ carts: [] });\n return;\n }\n setLoading(true);\n apiCall(\"cart/getCustomerCart\", { customer_email: _email }, (_status, _result) => {\n if (_status) {\n if (_result.carts.length === 0) {\n message.error(\"Customer cart not found\")\n }\n setResults(_result);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n\n const submitCustomerCart = (_customer_san, _bookorder_id) => {\n apiCall(\"cart/submitCustomerCart\", { customer_san: _customer_san, bookorder_id: _bookorder_id }, (_status, _result) => {\n if (_status) {\n // clear\n message.success(\"Cart submitted successfully.\");\n setResults({ carts: [] });\n } else {\n message.error(_result.error);\n }\n })\n }\n\n const columns = [\n { title: <small></small>, width: \"10px\", dataIndex: 'blank', key: 'blank' },\n {\n title: <small></small>, width: \"50px\", dataIndex: 'eisbn', key: 'eisbn', render: (e, f) => {\n return <img className=\"shadow-large\" style={{ \"maxHeight\": \"50px\", \"maxWidth\": \"50px\" }} onError={(e) => e.target.src = \"/no-cover.png\"} src={\"https://bookmanager.com/i/slider_23.php?b=\" + f.title_info.eisbn} />\n }\n },\n { title: <small></small>, width: \"10px\", dataIndex: 'blank', key: 'blank' },\n { title: <small>Title</small>, dataIndex: 'title', key: 'title', render: (e, f) => { return (f.title_info.title) } },\n {\n title: <small>Authors</small>, dataIndex: 'authors', key: 'authors', render: (e, f) => {\n return parseAuthorsPlain(f.title_info.authors)\n }\n },\n { title: <small>Binding</small>, dataIndex: 'binding', key: 'binding', render: (e, f) => { return (f.title_info.binding) } },\n { title: <small>Release Date</small>, dataIndex: 'release_date', key: 'release_date', render: (e, f) => { return (moment(f.title_info.release_date * 1000).format(\"MMMM Do, YYYY\")) } },\n { title: <small>Qty</small>, dataIndex: 'quantity', key: 'quantity', render: (e, f) => { return (f.cart_info.quantity) } },\n {\n title: <small></small>, dataIndex: 'quantity', key: 'quantity', render: (e, f) => {\n // Draw a warning icon and label if the item is unavailable\n return (!f.cart_info.cartable) ? <div style={{ \"textAlign\": \"center\" }}><WarningOutlined style={{ \"color\": \"#e77b21\" }} /><br /> Unavailable</div> : \"\"\n }\n },\n\n ];\n\n // Warn if cart contains unavailable items \n const confirmText = (_cart) => {\n if (_cart.contains_unavailable) {\n return (<><strong>This cart contains unavailable items.</strong> <br /> Are you sure you wish to submit?</>)\n } else {\n return (<>Are you sure?</>)\n }\n }\n\n const drawCart = (_customer, _order_id, _san, _cart) => {\n const { items = [], summary = {} } = _cart;\n return (\n <>\n <Table\n loading={loading}\n className=\"customerCart bc\"\n size=\"small\"\n style={{ \"border\": \"1px solid\" }}\n scroll={{ y: 330 }}\n locale={{ emptyText: \"Cart is empty.\" }}\n title={() => <>\n <div>\n <div style={{ \"float\": \"right\" }}><Popconfirm disabled={(_cart.items.length === 0)} onConfirm={() => submitCustomerCart(_san, _order_id)} title={confirmText(_cart)}><Button disabled={(_cart.items.length === 0)} size=\"small\" type=\"primary\"><small>Submit Cart</small></Button></Popconfirm></div>\n <div style={{ \"padding\": \"4px\", \"fontSize\": \"14px\" }}>\n <Space>\n <span>{_customer}'s cart</span>\n {(_cart.contains_unavailable && <>\n <Tooltip title={<>Unavailable items will be removed upon submit.</>}><strong style={{ \"cursor\": \"pointer\" }}><WarningOutlined style={{ \"color\": \"#e77b21\" }} /> <small>Contains unavailable item(s)</small></strong></Tooltip>\n </>)}\n </Space>\n </div>\n </div>\n\n </>}\n pagination={false}\n columns={columns}\n // If there are uncartable items, sort to the top (easier to see)\n dataSource={(_cart.contains_unavailable) ? items.sort((a, b) => {\n return (a.cart_info.cartable === b.cart_info.cartable) ? 0 : a ? -1 : 1;\n }) : items}\n />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Manage Customer Carts\"\n filters={\n <Form size=\"small\" layout=\"vertical\">\n <Space>\n <Form.Item label={<small>Customer email address</small>} name=\"keyword_search\">\n <Input.Search type=\"email\" onSearch={(e) => searchUser(e)} onChange={(e) => setSearch(e.target.value)} allowClear enterButton placeholder=\"Email address...\" style={{ \"width\": \"380px\" }} />\n </Form.Item>\n </Space>\n <br clear=\"both\" />\n </Form>\n }\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\", \"minHeight\": \"calc(100vh - 400px)\" }}>\n <conditional.true value={(results.carts.length > 0)}>\n {results.carts.map(item => {\n return drawCart(item.customer, item.order_id, item.customer_san, item.cart);\n })}\n </conditional.true>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n\n}","\nimport React, { useState } from \"react\";\nimport { Upload, message, Button, Modal, Table, Space, Layout, Typography, Divider } from \"antd\";\nimport { UploadOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../utils/conditional\";\nimport Overlay from \"../components/Overlay\";\n\n\nexport default function GiftRegistryImport(props) {\n\n\n\n const { gift_registry_id = \"\", getRegistry = () => { } } = props;\n\n const [uploading, setUploading] = useState(false);\n const [list, setList] = useState([]);\n const [parsed, setParsed] = useState(false)\n const [visible, setVisible] = useState(false);\n\n const close = () => {\n setList([]);\n setVisible(false);\n setParsed(false);\n }\n\n const addTitles = () => {\n\n let isbn_map = list.map(item => {\n return {\n isbn: item.isbn,\n quantity: item.quantity || 0\n }\n })\n\n let obj = {\n gift_registry_id: gift_registry_id,\n isbn_hash: JSON.stringify(isbn_map)\n }\n\n apiCall(\"giftregistry/addItems\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Titles added successfully!\");\n getRegistry();\n close();\n } else {\n message.error(_result.error)\n close();\n }\n })\n\n\n }\n\n const uploadFile = (_file) => {\n setUploading(true);\n apiCall(\"file/parseIsbnsQuantity\", { file: _file.file }, (_status, _result) => {\n if (_status) {\n setList(_result)\n setParsed(true);\n setVisible(true)\n } else {\n message.error(_result.error)\n }\n setUploading(false);\n });\n }\n\n const columns = [\n\n { title: <small>Import?</small>, width: \"70px\", dataIndex: 'exists', key: 'exists', render : (e) =>{\n return (e) ? \"Yes\" : <strong style={{\"color\" : \"#f00\"}}>No</strong>\n } },\n {\n title: <small></small>, width: \"40px\", dataIndex: 'eisbn', key: 'eisbn', render: (e, f) => {\n return <div style={{ \"textAlign\": \"center\" }}><img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"34px\", \"maxWidth\": \"30px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + e} /></div>\n }\n },\n { title: <small>Title</small>, dataIndex: 'title', key: 'title' },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn' },\n { title: <small>Qty</small>, width: \"40px\", dataIndex: 'quantity', key: 'quantity' },\n \n ]\n\n\n\n return (\n <>\n <Modal\n onCancel={() => close()}\n footer={null}\n destroyOnClose={true}\n visible={visible}>\n\n\n <Layout className=\"layout\">\n <Layout.Content style={{ \"padding\": \"0px\", \"width\": \"auto\" }} >\n\n <Typography.Title level={5}>Import to Registry </Typography.Title>\n <Typography.Paragraph>Review titles below to ensure they can be imported.</Typography.Paragraph>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n {/* START */}\n <conditional.true value={(visible && !parsed)}>\n <div>You will be able to preview the list of titles before importing it into the registry. <a target=\"_blank\" href={process.env.PUBLIC_URL + \"/example.txt\"}> Click here to see an example text file.</a>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n\n <Upload.Dragger className=\"hide-upload\" showUploadList={false} customRequest={(e) => uploadFile(e)} accept=\".txt, .xls, .xlsx, .tsv, .doc, .docx, .csv\" >\n <UploadOutlined disabled={uploading} style={{ \"fontSize\": \"30px\", height: \"35px\" }} />\n <div style={{\"padding\" : \"0px 20px\"}}>\n <p className=\"ant-upload-text\">{(uploading) ? \"Uploading...\" : \"Click or drag to upload\"}</p>\n <p className=\"ant-upload-hint\">\n Upload an Excel file (.xls or .xlsx), EDIFACT file (.txt) or a tab-delimited file (.txt) with the headers \"QTY\" and \"ISBN\".\n </p>\n </div>\n </Upload.Dragger>\n\n </conditional.true>\n\n {/* UPLOADING */}\n {/* <conditional.true value={(visible && uploading)}>\n <p className=\"ant-upload-text\">Loading, please wait.</p>\n </conditional.true> */}\n\n\n {/* UPLOADING COMPLETE, IMPORT */}\n <conditional.true value={(visible && !uploading && parsed)}>\n <Table\n columns={columns}\n dataSource={list}\n className={\"tableBorder\"}\n scroll={{ y: 300 }}\n pagination={false}\n size=\"small\"\n />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close()}>Cancel</Button>\n <Button onClick={() => addTitles()} type=\"primary\">Import Titles</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </conditional.true>\n\n\n </Layout.Content>\n </Layout>\n\n\n\n </Modal>\n\n\n {/* <Overlay width={500} component={<>\n\n <Layout className=\"layout\">\n <Layout.Content style={{ \"padding\": \"0px\", \"width\": \"auto\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={5}>Import to Registry </Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n\n \n\n\n\n\n\n\n\n </div>\n </Layout.Content>\n </Layout>\n\n\n\n\n </>} >\n \n </Overlay> */}\n\n <Button type=\"primary\" onClick={() => setVisible(true)} size=\"small\"><small><UploadOutlined /> Upload</small></Button>\n\n </>\n )\n\n\n\n\n\n\n // <Upload customRequest={(e) => uploadFile(e)} accept=\".jpg, .jpeg, .png\" >\n // <span style={{ \"color\": \"#fff\" }}><UploadOutlined /> <small>Upload</small></span>\n // </Upload>\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Space, Button, Table, Card, Typography, Row, Col, Divider, message, Spin, Form, Input, Select, DatePicker } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport { PlusSquareFilled, MinusSquareFilled, CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons';\nimport conditional from \"../utils/conditional\";\nimport moment from \"moment\";\nimport GiftRegistryImport from \"./GiftRegistryImport\";\nexport default function GiftRegistyDetails(props) {\n\n const { updateRow = () => { }, close = () => { }, data = {} } = props;\n const { gift_registry_id = \"\" } = data;\n\n const [isbn, setIsbn] = useState(\"\")\n\n\n\n const [results, setResults] = useState({\n owner: { name: \"\", email: \"\", phone: \"\", is_you: \"\" },\n shipping_id: null,\n shipping_address: null,\n shipping_encouraged: false,\n purchase_deadline: null,\n store_can_edit: false,\n occasion: \"\",\n title: \"\",\n description: \"\",\n items: [],\n date_created_ts: null\n });\n\n const [loading, setLoading] = useState(false);\n const [sort, setSort] = useState({ key: \"title\", asc: true });\n\n const getRegistry = () => {\n setLoading(true)\n apiCall(\"giftregistry/get\", { eid: gift_registry_id }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n setLoading(false);\n })\n }\n\n useEffect(getRegistry, []);\n\n\n const updateTitle = (_isbn, _qty, _inc = false) => {\n\n if (_inc) {\n _qty = _qty + 1;\n } else {\n _qty = _qty - 1;\n if (_qty < 0) {\n _qty = 0;\n }\n }\n\n let _obj = {\n gift_registry_id: gift_registry_id,\n isbn: _isbn,\n qty: _qty,\n }\n\n setLoading(true);\n\n apiCall(\"giftregistry/updateItem\", _obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n updateRow(_result);\n setIsbn(\"\");\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n\n }\n\n\n const addTitle = (_isbn, _qty) => {\n\n let _obj = {\n gift_registry_id: gift_registry_id,\n isbn: _isbn,\n qty: 1,\n }\n\n setLoading(true);\n\n apiCall(\"giftregistry/addItem\", _obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n updateRow(_result);\n setIsbn(\"\");\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n\n }\n\n const removeTitle = (_isbn) => {\n\n let _obj = {\n gift_registry_id: gift_registry_id,\n isbn: _isbn,\n }\n setLoading(true);\n apiCall(\"giftregistry/deleteItem\", _obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n updateRow(_result);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n\n }\n\n const updateRegistry = (_f) => {\n\n setLoading(true);\n _f.gift_registry_id = gift_registry_id;\n if (_f.purchase_deadline_ts) {\n _f.purchase_deadline_ts = moment(_f.purchase_deadline_ts).endOf('day').unix();\n } else {\n delete _f.purchase_deadline_ts;\n }\n\n apiCall(\"giftregistry/update\", _f, (_status, _result) => {\n if (_status) {\n setResults(_result);\n updateRow(_result);\n message.success(\"Registry updated.\")\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n\n\n\n const sortItems = (_arr) => {\n\n let _items = [..._arr];\n\n\n switch (sort.key) {\n case \"title\":\n _items = _items.sort((a, b) => {\n return a.title.title.localeCompare(b.title.title);\n })\n break;\n case \"author\":\n _items = _items.sort((a, b) => {\n return a.title.authors[0].name.localeCompare(b.title.authors[0].name);\n })\n break;\n case \"isbn\":\n _items = _items.sort((a, b) => {\n return a.title.isbn.localeCompare(b.title.isbn);\n })\n break;\n }\n\n if (!sort.asc) {\n return _items.reverse();\n }\n\n return _items;\n }\n\n const markPurchased = (_registry_id, _eisbn, _quantity, _inc = true) => {\n\n if (_inc) {\n _quantity = _quantity + 1;\n } else {\n _quantity = _quantity - 1;\n if (_quantity < 0) {\n _quantity = 0;\n }\n }\n setLoading(true);\n apiCall(\"giftregistry/markPurchased\", { eid: _registry_id, eisbn: _eisbn, qty_purchased: _quantity }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n updateRow(_result);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n\n const drawSort = (key = false) => {\n\n return (\n <span style={{ \"position\": \"relative\", \"top\": \"-3px\" }} class=\"ant-table-column-sorter-inner\">\n <span role=\"img\" aria-label=\"caret-up\" class=\"anticon anticon-caret-up ant-table-column-sorter-up\">\n <small><CaretUpOutlined style={{ \"color\": ((sort.key === key) && sort.asc) ? \"#1e90ff\" : \"#777\" }} /></small>\n </span><span role=\"img\" aria-label=\"caret-down\" class=\"anticon anticon-caret-down ant-table-column-sorter-down\">\n <small><CaretDownOutlined style={{ \"color\": ((sort.key === key) && !sort.asc) ? \"#1e90ff\" : \"#777\" }} /></small>\n </span>\n </span>\n )\n }\n\n\n\n const titleColumns = [\n { key: \"blank\", width: \"10px\" },\n\n {\n title: <small></small>, width: \"40px\", dataIndex: 'title', key: 'title', render: (e, f) => {\n return <div style={{ \"textAlign\": \"center\" }}><img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"34px\", \"maxWidth\": \"30px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + f.title.eisbn} /></div>\n }\n },\n {\n title: <small style={{ \"cursor\": \"pointer\" }} onClick={() => setSort({ key: \"title\", asc: (sort.key === \"title\") ? !sort.asc : true })}>Title  {drawSort(\"title\")}</small>, dataIndex: 'title', key: 'title', render: (e, f) => {\n return (\n <div className=\"nowrap150\">\n <a href={\"/purchasing/browse/filter/t/\" + f.title.isbn} target=\"blank\" style={{ \"whiteSpace\": \"nowrap\", \"maxWidth\": \"150px\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }}>\n {f.title.title}\n </a>\n </div>\n )\n }\n },\n {\n title: <small style={{ \"cursor\": \"pointer\" }} onClick={() => setSort({ key: \"author\", asc: (sort.key === \"author\") ? !sort.asc : true })}>Author  {drawSort(\"author\")}</small>, dataIndex: 'author', key: 'author', render: (e, f) => {\n return f.title.authors.map(item => item.name).join(\", \");\n }\n },\n {\n title: <small>Binding</small>, width: \"80px\", dataIndex: 'binding', key: 'binding', render: (e, f) => {\n return f.title.binding;\n }\n },\n {\n title: <small>Price</small>, width: \"60px\", dataIndex: 'price', key: 'price', render: (e, f) => {\n return <>${(f.title.available.length>0) ? f.title.available[0].row_price : \"\"}</>;\n }\n },\n {\n title: <small style={{ \"cursor\": \"pointer\" }} onClick={() => setSort({ key: \"isbn\", asc: (sort.key === \"isbn\") ? !sort.asc : true })}>ISBN  {drawSort(\"isbn\")}</small>, width: \"100px\", dataIndex: 'isbn', key: 'isbn', render: (e, f) => {\n return <nobr>{f.title.isbn}</nobr>;\n }\n },\n {\n title: <small>aOH</small>, width: \"40px\", dataIndex: 'aoh', key: 'aoh', render: (e, f) => {\n return <>{(f.title.available.length>0) ? f.title.available[0].onhand : \"\"}</>;\n }\n },\n {\n title: <small>aOO </small>, width: \"40px\", dataIndex: 'aoo', key: 'aoo', render: (e, f) => {\n \n return <>{(f.title.available.length>0) ? f.title.available[0].onorder : \"\"}</>;\n }\n },\n\n ]\n\n\n const col_requested = {\n title: <small>Requested</small>, width: \"70px\", dataIndex: 'gift_registry_id', key: 'gift_registry_id', render: (e, f) => {\n return (\n <Space size={0}>\n <Button disabled={(f.qty_requested < 2)} onClick={() => updateTitle(f.title.isbn, f.qty_requested, false)} style={{ \"padding\": \"0px 3px\" }} size=\"small\" type=\"link\"><MinusSquareFilled /></Button>\n <div style={{ \"padding\": \"5px\" }}>{f.qty_requested}</div>\n <Button onClick={() => updateTitle(f.title.isbn, f.qty_requested, true)} style={{ \"padding\": \"0px 3px\" }} size=\"small\" type=\"link\"><PlusSquareFilled /></Button>\n </Space>\n )\n }\n };\n\n const col_status = {\n title: <small>Status</small>, width: \"60px\", dataIndex: 'status', key: 'status', render: (e, f) => {\n return <>{f.qty_purchased} of {f.qty_requested}</>\n }\n };\n\n const col_purchased = {\n title: <small>Purchased</small>, width: \"70px\", dataIndex: 'gift_registry_id', key: 'gift_registry_id', render: (e, f) => {\n return (\n <Space size={0}>\n <Button disabled={(f.qty_purchased < 1)} onClick={() => markPurchased(e, f.title.eisbn, f.qty_purchased, false)} style={{ \"padding\": \"0px 3px\" }} size=\"small\" type=\"link\"><MinusSquareFilled /></Button>\n <div style={{ \"padding\": \"5px\" }}>{f.qty_purchased}</div>\n <Button onClick={() => markPurchased(e, f.title.eisbn, f.qty_purchased, true)} style={{ \"padding\": \"0px 3px\" }} size=\"small\" type=\"link\"><PlusSquareFilled /></Button>\n </Space>\n )\n }\n };\n\n const col_remove = {\n title: <small>Remove</small>, width: \"65px\", dataIndex: 'remove', key: 'remove', render: (e, f) => {\n return <Button onClick={() => removeTitle(f.title.isbn)} danger size=\"small\"><small>Remove</small></Button>\n }\n };\n\n const col_blank = { key: \"blank\", width: \"10px\" };\n\n if (results.store_can_edit) {\n titleColumns.push(col_requested, col_purchased, col_remove, col_blank)\n } else {\n titleColumns.push(col_status, col_purchased, col_blank)\n }\n\n\n const occasions = [\"Birthday\", \"Wedding\", \"Baby\", \"School\", \"Holiday\", \"Bookfair\", \"Other\"];\n\n const {\n owner = { name: \"\", email: \"\", phone: \"\", is_you: \"\" },\n shipping_id = null,\n\n shipping_address = null,\n shipping_encouraged = false,\n purchase_deadline = null,\n occasion = \"\",\n title = \"\",\n description = \"\",\n items = [],\n date_created_ts = null\n } = results;\n\n return (\n <div style={{ \"padding\": \"20px\" }}>\n <Spin spinning={loading}>\n <Form onFinish={(_f) => updateRegistry(_f)} layout=\"vertical\">\n <Typography.Title level={5}>Registry details</Typography.Title>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <Row gutter={20}>\n <Col span={14}>\n\n <conditional.true value={results.store_can_edit}>\n\n\n <Form.Item initialValue={title} name=\"title\" label=\"Title\" rules={[{ required: true, message: 'Title is required.' }]}>\n <Input placeholder=\"Title...\" />\n </Form.Item>\n\n <Form.Item initialValue={description} name=\"description\" label=\"Description\" rules={[{ required: true, message: 'Description is required.' }]}>\n <Input.TextArea maxLength={2000} placeholder=\"Description...\" />\n </Form.Item>\n\n <Space>\n <div style={{ \"width\": \"200px\" }}>\n <Form.Item initialValue={occasion} name=\"occasion\" label=\"Occasion\" rules={[{ required: true, message: 'Occasion is required.' }]}>\n <Select>\n {occasions.map((item, index) => {\n return (<Select.Option key={index} value={item}>{item}</Select.Option>)\n })}\n </Select>\n </Form.Item>\n </div>\n\n <Form.Item initialValue={(purchase_deadline) ? moment(purchase_deadline * 1000) : null} name=\"purchase_deadline_ts\" label=\"Purchase deadline\">\n <DatePicker dropdownClassName=\"interact\" />\n </Form.Item>\n\n {(results.store_can_edit && <>\n <div style={{\"marginTop\" : \"5px\", \"paddingLeft\" : \"5px\"}}><Button htmlType=\"submit\" type=\"primary\">Save</Button></div>\n </>)}\n\n </Space>\n\n </conditional.true>\n\n <conditional.true value={!results.store_can_edit}>\n <strong><small>Registry:</small></strong>\n <div className=\"shim\" />\n <Card>\n <Card.Meta\n title={<span className=\"c\">{title}</span>}\n description={<div className=\"c\">\n <div>Occasion: <em>{occasion}</em></div>\n <div>{description}</div>\n </div>}\n />\n </Card>\n </conditional.true>\n\n </Col>\n <Col span={10}>\n <strong><small>Creator:</small></strong>\n <div className=\"shim\" />\n <Card>\n <Card.Meta\n title={<span className=\"c\">{owner.name}</span>}\n description={<div className=\"c\">\n <a href={\"mailto:\" + owner.email}>{owner.email}</a>\n <div>{owner.phone}</div>\n </div>}\n />\n </Card>\n </Col>\n </Row>\n <div className=\"shim\" /><div className=\"shim\" />\n <strong><small>Titles:</small></strong>\n <div className=\"shim\" />\n <Table\n title={() => {\n if (!results.store_can_edit) {\n return <></>;\n }\n return (<div style={{ \"padding\": \"8px 8px\" }}><Space><Input.Search value={isbn} maxLength={13} onChange={(e) => setIsbn(e.target.value)} onSearch={(e) => addTitle(e)} size=\"small\" style={{ \"width\": \"330px\" }} placeholder=\"Add ISBN\" enterButton={<Button disabled={(!isbn)} type=\"primary\"><small>Add ISBN</small></Button>} /><GiftRegistryImport gift_registry_id={gift_registry_id} getRegistry={getRegistry} /></Space></div>)\n }}\n locale={{ emptyText: \"No titles\" }}\n scroll={{ y: 255 }}\n className={(results.store_can_edit) ? \"tborder2\" : \"tborder3\"}\n pagination={false}\n columns={titleColumns}\n dataSource={sortItems(items)}\n size=\"small\">\n </Table>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close()}>Close</Button>\n\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </Spin>\n </div>\n )\n}","import React, {useState} from \"react\";\nimport { Typography, Divider, Input, Space, Button, message } from \"antd\";\n\nexport default function GiftRegistryShare(props) {\n\n const { close = () => { }, gift_registry_id = \"\" } = props;\n\n const [copyText, setCopyText] = useState(\"Copy\");\n const url = window.sitesettings.url + \"gift-registry/\" + gift_registry_id;\n const copyLink = () =>{\n navigator.clipboard.writeText(url);\n setCopyText(\"Copied\")\n }\n\n return (\n <>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Share <span style={{ \"display\": \"block\", \"fontWeight\": \"normal\" }}><small>Copy this link and paste it into a web browser.</small></span></Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <Input.Search onSearch={() => copyLink()} enterButton={<>{copyText}</>} defaultValue={url} />\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={(e) => close()}>Close</Button>\n <Button type=\"primary\" onClick={(e) => window.open(url, \"_blank\")}>View registry</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Space, Form, Button, Table, Card, Input, Checkbox } from \"antd\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiCall, apiDownload } from \"../utils/Api\";\nimport moment from \"moment\";\nimport Paginate from \"../components/Paginate\";\nimport GiftRegistyDetails from \"./GiftRegistryDetails\";\nimport Overlay from \"../components/Overlay\";\nimport GiftRegistryShare from \"./GiftRegistryShare\";\n\nexport default function ManageGiftRegistriesPage() {\n\n const [results, setResults] = useState({ rows: [] });\n const [filters, setFilters] = useState({ current: 1, start: 0, limit: 20, include_expired: false });\n const [search, setSearch] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const downloadExcel = (_eid) => {\n apiDownload({ eid: _eid }, \"giftregistry/export\");\n }\n\n const getAll = (_search = search) => {\n\n setLoading(true)\n let obj = {\n offset: filters.start,\n count: filters.limit,\n include_expired: filters.include_expired\n }\n\n if (search) {\n obj.search = _search;\n }\n\n apiCall(\"giftregistry/list\", obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n console.log(_result)\n }\n setLoading(false);\n })\n }\n\n useEffect(getAll, [filters]);\n\n const updateRow = (_item) => {\n let _update = [...results.rows];\n let _index = _update.findIndex(itm => itm.gift_registry_id === _item.gift_registry_id);\n _update[_index] = _item;\n setResults({ results, \"rows\": _update });\n }\n\n const columns = [\n {},\n { title: <small>Registry name</small>, dataIndex: 'title', key: 'title' },\n \n {\n title: <small>Creator name</small>, dataIndex: 'owner', key: 'owner', render: (e) => {\n\n let { name = \"\" } = e;\n return name;\n }\n },\n\n \n {\n title: <small>Creator email</small>, dataIndex: 'owner', key: 'owner', render: (e) => {\n\n let { email = \"\" } = e;\n return email;\n }\n },\n {\n title: <small>Shipping</small>, dataIndex: 'shipping_address', key: 'shipping_address', render: (e) => {\n return (e.hasOwnProperty(\"address_id\") && (e.address_id)) ? \"Yes\" : \"No\"\n }\n },\n {\n title: <small>Shipping Encouraged</small>, dataIndex: 'shipping_encouraged', key: 'shipping_encouraged', render: (e) => {\n return (e) ? \"Yes\" : \"No\"\n }\n },\n\n {\n title: <small>Date created</small>, dataIndex: 'date_created_ts', key: 'date_created_ts', render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do, YYYY\") : \"No deadline\";\n }\n },\n\n {\n title: <small>Purchase Deadline</small>, dataIndex: 'purchase_deadline', key: 'purchase_deadline', render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do, YYYY\") : \"No deadline\";\n }\n },\n {\n title: <small>Expired</small>, dataIndex: 'expired', key: 'expired', render: (e, f) => {\n\n if (!f.purchase_deadline) {\n return \"-\";\n }\n return (moment().unix() > moment(f.purchase_deadline * 1000).unix()) ? \"Yes\" : \"No\";\n }\n },\n {\n title: <small>Progress</small>, dataIndex: 'items', key: 'items', render: (e, f) => {\n\n return (<>{f.total_purchased} of {f.total_requested} purchased</>)\n\n }\n },\n { title: <small><nobr>Can manage?</nobr></small>, dataIndex: 'store_can_edit', key: 'store_can_edit', render : (e) => {\n return (e) ? \"Yes\" : \"No\"\n } },\n {\n title: <small>Actions</small>, width: \"100px\", dataIndex: 'items', key: 'items', render: (e, f) => {\n return (\n <Space>\n <Overlay component={<GiftRegistyDetails updateRow={updateRow} data={f} />}><Button type=\"primary\" size=\"small\"><small>Edit</small></Button></Overlay>\n <Button onClick={() => window.open(\"/registry/\" + f.gift_registry_id, \"_blank\")} size=\"small\"><small>Print</small></Button>\n <Overlay width={450} component={<GiftRegistryShare gift_registry_id={f.gift_registry_id} />}><Button size=\"small\"><small>Share</small></Button></Overlay>\n <Button onClick={() => downloadExcel(f.gift_registry_id)} type=\"ghost\" size=\"small\"><small>XLS</small></Button>\n </Space>\n )\n }\n },\n ]\n\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Manage Gift Registries\"\n filters={\n <Form size=\"small\" layout=\"vertical\">\n <Space>\n <Form.Item label={<small>Search</small>} name=\"keyword_search\">\n <Input.Search onSearch={(e) => getAll(e)} onChange={(e) => setSearch(e.target.value)} allowClear enterButton placeholder=\"Creator name, email, registry name, description...\" style={{ \"width\": \"380px\" }} />\n </Form.Item>\n <Form.Item label={<small>Include expired</small>}>\n <Checkbox checked={filters.include_expired} onChange={(e) => setFilters({ ...filters, \"include_expired\": e.target.checked })} />\n </Form.Item>\n </Space>\n <br clear=\"both\" />\n </Form>\n }\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <Paginate setPaginate={(e) => setFilters({ ...filters, current: e.current, start: e.offset, limit: e.pagesize })} count={results.row_count} paginate={{ current: filters.current, pagesize: filters.limit, offset: filters.start }} />\n <Table\n loading={loading}\n size=\"small\"\n header={<>Header</>}\n pagination={false}\n columns={columns}\n dataSource={results.rows}\n />\n <Paginate setPaginate={(e) => setFilters({ ...filters, current: e.current, start: e.offset, limit: e.pagesize })} count={results.row_count} paginate={{ current: filters.current, pagesize: filters.limit, offset: filters.start }} />\n </Card>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Button, Divider, Empty, Form, Layout, Radio, Select, Space, Spin, Typography, Table, Input, Pagination } from \"antd\";\nimport { CloseOutlined, PicCenterOutlined, MenuOutlined, StarOutlined, StarFilled, DeleteFilled, DownSquareFilled, DownSquareOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../utils/conditional\";\nimport moment from \"moment\";\nimport ListFav from \"../components/lists/ListFav\";\nimport Renderer from \"../components/Renderer\";\nimport ListTrash from \"../components/lists/ListTrash\";\nimport ListArchive from \"../components/lists/ListArchive\";\nimport ListFolder from \"../components/lists/ListFolder\";\nimport ListItem from \"../components/lists/ListItem\";\nimport ListEdit from \"../components/lists/ListEdit\";\nimport { disabledColor, successColor, warningColor, pathToObject, objectToPath } from \"../utils/Utils\";\nimport BrowseFilters5 from \"../components/BrowseFilters5\";\nimport Paginate from \"../components/Paginate\";\nimport { useHistory } from \"react-router-dom\";\nimport { useLocation } from \"react-router-dom\";\nimport Bookmark from \"../components/Bookmark\";\nimport Overlay from \"../components/Overlay\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport Cookies from \"js-cookie\";\nimport ListQuickPick from \"../components/lists/ListQuickPick\";\n\nexport default function MyListsPage(props) {\n\n const history = useHistory();\n const location = useLocation();\n const [loading, setLoading] = useState(true);\n const [results, setResults] = useState({ filters: {}, rows: [], toolboxes: {} });\n const [expanded, setExpanded] = useState([]);\n const [showDetails, setShowDetails] = useState((Cookies.get(\"lists_show_list\") === \"true\") ? false : true);\n const path = \"/purchasing/my-lists\";\n const [searchFilters, setSearchFilters] = useState(pathToObject(location.pathname))\n const [current, setCurrent] = useState(parseInt(searchFilters.o / searchFilters.l) + 1);\n const [filters, setFilters] = useState({});\n const [initLoaded, setInitLoaded] = useState(false);\n const [listLabel, setListLabel] = useState({ key: \"\", value: \"\" })\n\n\n const getLists = () => { }\n\n\n\n const getCatalogues = (_change = false, _obj = searchFilters) => {\n setLoading(true);\n let _filters = { ..._obj };\n _filters.filters = JSON.stringify(_filters.filters);\n apiCall(\"titlelist/getMyLists\", _filters, (_status, _result) => {\n if (_status) {\n if (_result.row_count === 1) {\n if (_obj.hasOwnProperty(\"t\")) {\n if (!isNaN(_obj.t)) {\n\n setListLabel({ key: _result.rows[0].actual_id, value: _result.rows[0].name })\n }\n }\n }\n setFilters(_result.filter_info);\n setResults(_result);\n setLoading(false);\n setInitLoaded(true);\n }\n })\n }\n\n const headerSearch = () => {\n window.scrollTo(0, 0);\n setLoading(true);\n let obj = pathToObject(location.pathname);\n setSearchFilters(obj);\n getCatalogues(false, obj);\n }\n\n useEffect(headerSearch, [location.pathname])\n\n const deleteList = (_list_id) => {\n apiCall(\"titlelist/delete\", { list_id: _list_id }, (_status, _result) => {\n if (_status) {\n // getLists();\n //let res = { ...results };\n //setResults({ ...results, \"rows\": res.rows.filter(item => item.list_id !== _list_id) })\n }\n })\n }\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.list_id)) {\n setExpanded([_data.list_id]);\n } else {\n setExpanded([]);\n }\n }\n\n const drawChildTable = (_record) => {\n return (\n <>\n <div className=\"hideHover\" style={{ \"marginTop\": \"-4px\", \"marginLeft\": \"-8px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <Renderer key={_record.list_id}>\n <ListItem getLists={getLists} setResults={setResults} results={results} data={_record} />\n </Renderer>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </>\n )\n }\n\n // const drawChildTable = (_record) => {\n // return (\n // <>\n\n // <div className=\"hideHover\" style={{ \"marginTop\": \"-4px\", \"marginLeft\" : \"-8px\" }}>\n // <div style={{ \"padding\": \"0 20px\" }}>\n // <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n // <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n // <br clear=\"both\" />\n // </div>\n // </div>\n // <div style={{ \"padding\": \"0px 20px\" }}>\n // <Renderer key={_record.list_id}>\n // <ListItem getLists={getLists} setResults={setResults} results={results} data={_record} />\n // </Renderer>\n // </div>\n // <div className=\"shim\" /><div className=\"shim\" />\n // </div>\n // </>\n // )\n // }\n\n\n\n const columns = [\n { key: \"blank\", width: \"10px\" },\n {\n title: <small>  Fav</small>, dataIndex: 'is_starred', key: 'is_starred', render: (e, f) => {\n return (<ListFav list={f} results={results} setResults={setResults} getLists={getCatalogues} />);\n }\n },\n\n {\n title: <small>Vendor</small>, dataIndex: 'vendor', key: 'vendor', render: (e) => {\n return (e) ? e.name : \"\";\n }\n },\n\n {\n title: <small>List name</small>, dataIndex: 'name', key: 'name', render: (e, f) => {\n return (e) ? <a onClick={() => expandCell(f)}>{e}</a> : \"\";\n }\n },\n {\n title: <small>Titles</small>, dataIndex: 'isbns_count', key: 'isbns_count'\n },\n {\n title: <small>OH</small>, dataIndex: 'onhand', key: 'onhand', render: (e) => {\n return <span style={{ \"color\": successColor, \"fontWeight\": \"500\" }}>{e}</span>\n }\n },\n {\n title: <small>OO</small>, dataIndex: 'onorder', key: 'onorder', render: (e) => {\n return <span style={{ \"color\": warningColor, \"fontWeight\": \"500\" }}>{e}</span>\n }\n },\n {\n title: <small>Updated</small>, dataIndex: 'date_updated', key: 'date_updated', render: (e, f) => {\n return (\n <>\n <div><nobr>{moment(e * 1000).format(\"MMMDD-YY\")}</nobr></div><div style={{ \"color\": disabledColor }}>\n {/* <em>{f.views} views</em> */}\n </div>\n </>\n )\n }\n },\n { title: <small>Cart</small>, dataIndex: 'cart_count', key: 'cart_count' },\n\n {\n title: <small>Category</small>, dataIndex: 'category', key: 'category', render: (e, f) => {\n return <><div style={{ \"color\": disabledColor }}><em>{e}</em></div><div style={{ \"fontWeight\": \"500\", \"maxWidth\": \"100px\", \"whiteSpace\": \"nowrap\", \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }}>{f.owner_name}</div></>\n }\n },\n\n {\n title: <small>Quick pick</small>, dataIndex: 'qp', key: 'qp', render: (e, f) => {\n\n return <ListQuickPick list={f} list_id={f.list_id} />\n }\n },\n\n {\n title: <small>Folder</small>, width: \"160px\", dataIndex: 'folder', key: 'folder', render: (e, f) => {\n return (\n <Space align=\"end\">\n <Bookmark link list_id={f.list_id} />\n <ListTrash list={f} results={results} setResults={setResults} />\n <ListArchive list={f} results={results} setResults={setResults} />\n <ListFolder getLists={getLists} results={results.rows} setResults={setResults} folder={e} list_id={f.list_id} />\n </Space>\n )\n }\n },\n { key: \"space\", width: \"20px\" },\n ]\n\n const displayGroup = () => {\n return (\n <>\n <Radio.Group size=\"small\" value={showDetails.toString()} onChange={(e) => {\n Cookies.set(\"lists_show_list\", showDetails);\n setShowDetails(!showDetails);\n\n }} buttonStyle=\"solid\">\n <Radio.Button value=\"true\"><small><PicCenterOutlined /></small></Radio.Button>\n <Radio.Button value=\"false\"><small><MenuOutlined /></small></Radio.Button>\n </Radio.Group>\n </>\n )\n }\n\n const SearchWithin = (props) => {\n const [v, setV] = useState(props.term);\n const searchWithin = (e, sw = true) => {\n setCurrent(1);\n let sf\n if (sw) {\n // Augment Search Filters\n sf = { ...searchFilters, \"t\": e, \"o\": 0 }\n } else {\n // Clear Search Filters\n sf = { \"t\": e, \"o\": 0 }\n }\n getCatalogues(false, sf);\n setSearchFilters(sf);\n history.push({\n pathname: path + objectToPath(sf)\n })\n }\n return (\n <Space size={2}>\n <Input value={v} onChange={(e) => {\n if(e.target.value === \"\" && props.term !==\"\"){\n // clear button\n searchWithin(\"\")\n } else {\n setV(e.target.value);\n }\n }} size=\"small\" onKeyDown={(e) => (e.key === \"Enter\" && searchWithin(e.target.value)) } allowClear placeholder=\"Enter ISBN, list id or keyword within a list's name\" style={{ \"width\": \"400px\" }} />\n <Button onClick={() => searchWithin(v)} size=\"small\" type=\"primary\"><small>Search within</small></Button>\n <Button onClick={() => searchWithin(v, false)} size=\"small\" type=\"primary\"><small>Search all</small></Button>\n </Space>\n )\n }\n\n const drawFilters = () => {\n return (\n <div style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"10px 20px\" }}>\n <Form layout=\"vertical\">\n <Space wrap size={[5, 0]}>\n\n <Form.Item noStyle label={<small>Find a list</small>} name=\"customer_search\">\n <SearchWithin term={(searchFilters.hasOwnProperty(\"t\") ? searchFilters.t : \"\")} />\n </Form.Item>\n\n <Form.Item noStyle label={<small>Sort</small>}>\n <Select size=\"small\" defaultValue={searchFilters.v} onChange={(e) => {\n let sf = { ...searchFilters, \"v\": e }\n getCatalogues(false, sf);\n history.push({\n pathname: path + objectToPath(sf)\n })\n }} style={{ width: 130 }}>\n <Select.Option value=\"\" ><small>Last updated</small></Select.Option>\n <Select.Option value=\"name\"><small>Alphabetical</small></Select.Option>\n </Select>\n </Form.Item>\n <Form.Item noStyle label={<small>Create new</small>}>\n <Button type=\"primary\" size=\"small\"><small><Overlay width={700} component={<ListEdit create={true} callback={getCatalogues} />}>Create</Overlay></small></Button>\n </Form.Item>\n\n </Space>\n <br clear=\"both\" />\n </Form>\n </div>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\" style={{ \"minHeight\": \"500px\" }}>\n <LayoutHeader\n title={<><div style={{ \"float\": \"right\", \"marginTop\": \"-7px\" }}>{displayGroup()}</div>My Lists</>}\n filters={\n <div style={{ \"margin\": \"0px -20px\", \"marginTop\": \"-15px\" }}>\n {(initLoaded && <>\n <BrowseFilters5 listLabel={listLabel} loading={loading} filters={filters} setFilters={setFilters} toolboxes={results.toolboxes} header=\"mylists\" path={path} setCurrent={setCurrent} searchFilters={searchFilters} setSearchFilters={setSearchFilters} />\n {drawFilters()}\n </>)}\n </div>\n }\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <Paginate loading={loading} paginate={{ current: current, offset: (searchFilters).hasOwnProperty(\"o\") ? searchFilters.o : 0, pagesize: (searchFilters).hasOwnProperty(\"l\") ? searchFilters.l : 20 }} setPaginate={(e) => {\n setCurrent(e.current);\n let sf = { ...searchFilters, \"o\": e.offset, \"l\": e.pagesize }\n getCatalogues(false, sf);\n history.push({ pathname: path + objectToPath(sf) });\n }} count={results.row_count} />\n <div className=\"bc bcg2\" style={{ \"borderTop\": (showDetails) ? \"1px solid\" : \"none\" }}>\n <conditional.true value={(!showDetails)}>\n <Table\n rowKey=\"list_id\"\n size=\"small\"\n columns={columns}\n loading={loading}\n className={\"fullTable\"}\n dataSource={results.rows}\n pagination={false}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </conditional.true>\n <conditional.true value={(showDetails)}>\n <Spin spinning={loading}>\n <div style={{ \"padding\": \"20px\" }}>\n <conditional.true value={(results.rows.length < 1)}>\n <Empty description=\"No results.\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </conditional.true>\n {results.rows.map((item) => {\n return <div key={item.list_id}><Renderer><ListItem getLists={getCatalogues} setResults={setResults} results={results} data={item} /></Renderer><div className=\"borderBottom shim\" style={{ \"margin\": \"35px -20px\", \"borderBottomWidth\": \"6px\" }} /></div>\n })}\n </div>\n </Spin>\n </conditional.true>\n </div>\n <Paginate loading={loading} paginate={{ current: current, offset: (searchFilters).hasOwnProperty(\"o\") ? searchFilters.o : 0, pagesize: (searchFilters).hasOwnProperty(\"l\") ? searchFilters.l : 20 }} setPaginate={(e) => {\n setCurrent(e.current);\n let sf = { ...searchFilters, \"o\": e.offset, \"l\": e.pagesize }\n getCatalogues(false, sf);\n history.push({ pathname: path + objectToPath(sf) });\n }} count={results.row_count} />\n </Layout.Content>\n </Layout>\n </>\n )\n}","import { message, Row, Col, Button, Space, Divider, Typography, Spin, Layout } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { apiCall } from \"../utils/Api\";\n\nexport default function PickListPage(props) {\n\n const { ee_def_id = \"\" } = useParams();\n const [results, setResults] = useState([]);\n const [loading, setLoading] = useState(true)\n\n const fetchList = () => {\n setLoading(true);\n apiCall(\"titlelist/getPicklist\", { list_id: ee_def_id }, (_status, _result) => {\n if (_status) {\n\n _result.tl_misc.forEach((element, ind) => {\n\n \n if (!element.data) {\n element.data = {}\n }\n\n element.data.binding = _result.isbns[ind].binding; \n\n });\n setResults(_result.tl_misc)\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n\n useEffect(fetchList, [])\n\n const updateCurrent = (_isbn, _amt) => {\n let _res = [...results];\n let _index = _res.findIndex(item => item.isbn === _isbn);\n if (_index > -1) {\n // found\n _res[_index].data.pl_current = _amt;\n setResults(_res);\n }\n return;\n }\n\n const drawRow = (_row = {}, _index) => {\n let {\n isbn = \"\",\n eisbn = \"\",\n data = {}\n } = _row;\n\n \n\n let {\n pl_current = 0,\n pl_class = \"\",\n pl_title = \"\",\n pl_author = \"\",\n pl_availoh = \"\",\n pl_pickqty = 0,\n pl_price = \"\",\n binding = \"\"\n } = data;\n\n return (\n <div key={_index}>\n <Row gutter={20} key={isbn}>\n <Col flex={\"100px\"}>\n <Space direction=\"vertical\">\n <img className=\"shadow-large\" style={{ \"maxWidth\": \"100px\" }} onError={(e) => e.target.src = \"/no-cover.png\"} src={\"https://bookmanager.com/i/m?b=\" + eisbn} />\n <div style={{ \"textAlign\": \"center\" }}>{isbn}</div>\n </Space>\n </Col>\n <Col flex={\"230px\"}>\n <Space size={0} direction=\"vertical\">\n <Space size={6}>\n <Button disabled={(pl_current >= pl_pickqty)} onClick={() => updateCurrent(isbn, pl_pickqty)}>All</Button>\n <Button disabled={(pl_current >= pl_pickqty)} onClick={() => updateCurrent(isbn, pl_current + 1)}>+</Button>\n <Button disabled={(pl_current < pl_pickqty || pl_pickqty === 0)} onClick={() => updateCurrent(isbn, pl_current - 1)}>-</Button>\n <Button disabled={(pl_current < pl_pickqty || pl_pickqty === 0)} onClick={() => updateCurrent(isbn, 0)}>None</Button>\n </Space>\n <div className=\"shim\" />\n \n <div>{pl_class}</div>\n <div style={{ \"fontWeight\": \"600\", \"lineHeight\" : \"16px\" }}>\n {pl_title}\n <div><small><strong>{binding}</strong></small></div>\n </div>\n \n <div><em>{pl_author}</em></div>\n <div>{pl_availoh} onhand ${pl_price}</div>\n\n <div style={{ \"fontSize\": \"24px\" }}>\n <div className=\"shim\" />\n <span style={{ \"color\": (pl_current === 0) ? \"red\" : \"inherit\" }}>{pl_current}</span> of {pl_pickqty}\n </div>\n </Space>\n </Col>\n </Row>\n <Divider dashed />\n </div>\n )\n\n\n }\n\n const drawFilters = () => {\n\n return (\n <>\n <div style={{ \"fontSize\": \"20px\", \"letterSpacing\": \"1px\" }}>Titlelist Viewer</div>\n {/* <div className=\"shim\" /> */}\n {/* <Input.Search size=\"small\" style={{ \"maxWidth\": \"400px\" }} enterButton={<small>Lookup by ID</small>} /> */}\n <Divider style={{ \"marginTop\": \"15px\" }} />\n </>\n )\n }\n\n const [max, setMax] = useState(20);\n\n return (\n <Spin spinning={loading}>\n <Layout style={{ \"minHeight\": \"calc(100vh)\" }}>\n <div style={{ \"padding\": \"20px\" }}>\n {drawFilters()}\n {results.slice(0, max).map((item, index) => {\n return drawRow(item, index);\n })}\n {(max < results.length && <Button onClick={() => setMax(max + 20)}>Show more</Button>)}\n </div>\n </Layout>\n </Spin>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { apiCall } from \"../utils/Api\";\nimport { Alert, Row, Col, Space, Divider, Typography, Button } from \"antd\";\nimport { parseAuthorsPlain } from \"../utils/Utils\";\nimport moment from \"moment\";\nimport { PrinterOutlined } from '@ant-design/icons';\n\nexport default function PrintGiftRegistry(props) {\n\n const { registry_id = \"\" } = useParams();\n const [results, setResults] = useState({\n items: [],\n owner: {\n name: \"\",\n email: \"\",\n phone: \"\",\n is_you: false\n },\n title: \"\",\n occasion: \"\",\n description: \"\",\n purchase_deadline: null,\n });\n\n const [error, setErrror] = useState(false);\n\n const fetchRegistry = () => {\n apiCall(\"giftregistry/get\", { eid: registry_id }, (_status, _result) => {\n if (_status) {\n setResults(_result)\n } else {\n setErrror(_result.error);\n }\n })\n }\n\n useEffect(fetchRegistry, []);\n\n const drawRow = (_itm) => {\n\n const {\n qty_requested = 0,\n qty_purchased = 0,\n } = _itm;\n\n const {\n title = \"\",\n isbn = \"\",\n eisbn = \"\",\n binding = \"\",\n authors = [],\n conditions = [],\n available = []\n\n } = _itm.title;\n\n let category = \"\";\n let subcategory = \"\";\n let price = \"\";\n let onhand = \"0\";\n if(available.length > 0){\n if(available[0].hasOwnProperty(\"onhand\")){\n onhand = available[0].onhand;\n } \n if(available[0].hasOwnProperty(\"row_price\")){\n price = available[0].row_price;\n }\n } \n \n if(conditions.length > 0){\n if(conditions[0].hasOwnProperty(\"category\")){\n category = conditions[0].category;\n }\n if(conditions[0].hasOwnProperty(\"subcategory\")){\n subcategory = conditions[0].subcategory;\n }\n \n }\n \n\n\n\n return (\n <div style={{ \"width\": \"295px\", \"height\": \"178px\", \"overflow\": \"hidden\" }}>\n \n <Row gutter={15} key={isbn}>\n <Col flex={\"95px\"}>\n <Space direction=\"vertical\">\n <img className=\"shadow-large\" style={{ \"maxWidth\": \"95px\" }} onError={(e) => e.target.src = \"/no-cover.png\"} src={\"https://bookmanager.com/i/m?b=\" + eisbn} />\n </Space>\n </Col>\n <Col flex={\"200px\"}>\n <div style={{ \"lineHeight\": \"14px\" }}><strong>{title}</strong></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small>{parseAuthorsPlain(authors)}</small></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small><em>Binding: </em>{binding}</small></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small><em>Class: </em> {category} {subcategory}</small></div>\n <div style={{ \"marginTop\": \"-5px\" }}><small>Price: <em>{(price) ? \"$\" + price.toString() : \"No Price\"}</em> - {onhand.toString()} in stock</small></div>\n \n <Space>\n <div><strong><small>Requested:</small> {qty_requested}</strong></div>\n <div><strong><small>Purchased:</small> {qty_purchased}</strong></div>\n </Space>\n \n \n </Col>\n </Row>\n <Divider dashed />\n </div>\n )\n }\n\n if (error) {\n return (<div style={{ \"margin\": \"0 auto\", \"width\": \"350px\", \"marginTop\": \"calc(20vh)\" }}><Alert type=\"error\" description={error} /></div>)\n }\n\n\n const printPage = () => {\n let printContents = document.getElementById('content').innerHTML;\n let originalContents = document.body.innerHTML;\n document.body.innerHTML = printContents;\n window.print();\n document.body.innerHTML = originalContents;\n }\n\n\n return (<>\n\n <div id=\"content\">\n <div id=\"print\" style={{ \"padding\": \"0px 20px\" }}>\n\n <div style={{ \"height\": \"200px\", \"overflow\": \"hidden\" }}>\n <div className=\"shim\" style={{\"height\" : \"20px\"}} />\n <div style={{ \"float\": \"right\", \"padding\": \"20px\" }}><Button className=\"no-print\" onClick={() => printPage()} icon={<PrinterOutlined />} type=\"primary\">Print</Button></div>\n <Typography.Title level={2}>{results.title}</Typography.Title>\n <div style={{ \"marginTop\": \"-10px\" }}>\n <div>Occasion : <strong>{results.occasion}</strong></div>\n {(results.purchase_deadline && <><div>Purchase deadline : <strong>{moment(results.purchase_deadline * 1000).format(\"MMM Do, YYYY\")}</strong></div></>)}\n <div>As of : <em>{moment().format(\"MMM Do, YYYY\")}</em></div>\n <div>Description: <em>{results.description}</em></div>\n \n </div>\n <Divider />\n </div>\n <div className=\"grgrid\">\n {results.items.map(item => { return drawRow(item) })}\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n </div>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, message, Row, Col, Typography, Button, Radio, Divider, Upload } from \"antd\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiCall, apiGetPath } from \"../utils/Api\";\nimport { cacheBuster } from \"../utils/Utils\";\n\nexport default function ReceiptLogoPage() {\n\n const [logoPath, setLogoPath] = useState(apiGetPath({}, \"printer_logo/getLogo\") + cacheBuster());\n const [ogPath, setOgPath] = useState(\"\");\n const [uploading, setUploading] = useState(false);\n\n // calling resets cache so images update (image names don't change)\n const getOgPath = (_p) => {\n setOgPath(\"https://bookmanager.com/\" + _p + \"?cb=\" + cacheBuster());\n }\n\n const getLogoPath = () => {\n setLogoPath(apiGetPath({}, \"printer_logo/getLogo\") + cacheBuster());\n }\n\n const [init, setInit] = useState(false);\n\n const [results, setResults] = useState({\n logo_path: \"\",\n printer_brand: \"\",\n dpi: \"\",\n resize_image: false,\n position: \"\",\n dither: false\n });\n\n\n const getSettings = () => {\n apiCall(\"printer_logo/getSettings\", {}, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setInit(true);\n getOgPath(_result.logo_path); \n } else {\n message.error(_result.error);\n }\n })\n }\n\n useEffect(getSettings, []);\n\n\n const setSettings = () => {\n\n if (!init) {\n return;\n }\n\n apiCall(\"printer_logo/setSettings\", results, (_status, _result) => {\n if (_status) {\n getLogoPath();\n } else {\n message.error(_result.error);\n }\n })\n }\n\n useEffect(setSettings, [results]);\n\n const uploadFile = (_file) => {\n setUploading(true);\n apiCall(\"printer_logo/upload\", { file: _file.file, location: \"/receipt_logo.png\" }, (_status, _result) => {\n if (_status) {\n getLogoPath(); \n getOgPath(results.logo_path); \n message.success(\"File uploaded successfully.\")\n } else {\n message.error(\"Error: \" + _result.error);\n }\n setUploading(false);\n })\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Receipt Printer Logo Converter\"\n description=\"Use this page to congfigure and generate logos for your receipt printer.\"\n />\n <Layout.Content>\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Source image</Typography.Title>\n <Divider style={{ \"marginTop\": \"15px\" }} dashed />\n <Row gutter={70} align=\"middle\">\n <Col span={10}>\n <div className=\"bc pattern\" style={{ \"backgroundImage\": \"url(\"+ogPath+\")\", \"backgroundSize\" : \"contain\", \"backgroundRepeat\": \"no-repeat\", \"backgroundPosition\": \"center\", \"border\": \"1px solid\", \"width\": \"512px\", \"height\": \"250px\", \"backgroundColor\": \"#fdfdfd\" }}></div>\n </Col>\n <Col span={14}>\n <Typography.Title level={5}>Upload new image</Typography.Title>\n <Typography.Paragraph type=\"secondary\" >\n <div>Upload an image file, and use the converted image in your receipt printer to place your store's logo at the top of a receipt.</div>\n <div className=\"shim\" /><div className=\"shim\" />\n <div>Accepted: <strong>PNG, GIF, or JPG.</strong></div>\n <div>Recommended for best results: a pixel-perfect, two-colour black and white GIF or PNG image that is exactly 512 pixels wide.</div>\n <div className=\"shim\" /><div className=\"shim\" />\n <Upload className=\"hide-upload\" customRequest={(e) => uploadFile(e)} accept=\".png,.gif,.jpg\" >\n <Button loading={uploading} type=\"primary\">Upload</Button>\n </Upload>\n </Typography.Paragraph>\n\n </Col>\n </Row>\n <br /><br />\n <Typography.Title level={5}>Conversion Options</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n <Typography.Paragraph type=\"secondary\" >\n <div>These conversion options are provided as a convenience to show the store's logo on receipts in an aesthetically pleasing arrangement. <br />For best results, upload an image that meets the recommendations above, and choose 180dpi output quality.</div>\n </Typography.Paragraph>\n <Row gutter={10}>\n <Col flex={\"260px\"}>\n <div><strong>Receipt Printer Brand:</strong></div><div className=\"shim\" />\n <div><strong>Output quality:</strong></div><div className=\"shim\" />\n <div><strong>Resize logo image to fit receipt width:</strong></div><div className=\"shim\" />\n <div><strong>Image position if not resizing logo:</strong></div><div className=\"shim\" />\n <div><strong>Dither:</strong></div><div className=\"shim\" />\n </Col>\n <Col flex={\"300px\"}>\n <div><Radio checked>Bixolon</Radio></div><div className=\"shim\" />\n <div><Radio.Group value={results.dpi} onChange={(e) => setResults({ ...results, \"dpi\": e.target.value })} ><Radio style={{ \"width\": \"80px\" }} value={\"90\"}>90 dpi</Radio><Radio value={\"180\"}>180 dpi</Radio></Radio.Group></div><div className=\"shim\" />\n <div><Radio.Group value={results.resize_image} onChange={(e) => setResults({ ...results, \"resize_image\": e.target.value })}><Radio style={{ \"width\": \"80px\" }} value={true}>Yes</Radio><Radio value={false}>No</Radio></Radio.Group></div><div className=\"shim\" />\n <div><Radio.Group value={results.position} onChange={(e) => setResults({ ...results, \"position\": e.target.value })}><Radio style={{ \"width\": \"80px\" }} value={\"left\"}>Left</Radio><Radio value={\"center\"}>Center</Radio><Radio value={\"right\"}>Right</Radio></Radio.Group></div><div className=\"shim\" />\n <div><Radio.Group value={results.dither} onChange={(e) => setResults({ ...results, \"dither\": e.target.value })}><Radio style={{ \"width\": \"80px\" }} value={true}>Yes</Radio><Radio value={false}>No</Radio></Radio.Group></div><div className=\"shim\" />\n </Col>\n </Row>\n <br /><br />\n <Typography.Title level={5}>Sample Image Output:</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n <div className=\"shim\" /><div className=\"shim\" />\n <Row gutter={70} align=\"middle\">\n <Col span={10}>\n <div className=\"bc pattern\" style={{ \"backgroundImage\": \"url(\" + logoPath + \")\", \"backgroundSize\" : \"contain\", \"backgroundRepeat\": \"no-repeat\", \"backgroundPosition\": \"center\", \"border\": \"1px solid\", \"width\": \"512px\", \"height\": \"250px\", \"backgroundColor\": \"#fdfdfd\" }}></div>\n </Col>\n\n </Row>\n </div>\n </Layout.Content>\n </Layout>\n </>\n );\n}","import React from \"react\";\nimport { Layout, Typography, Divider, Button, Alert } from \"antd\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiDownload } from \"../utils/Api\";\nexport default function RemoteSupportPage() {\n\n\n const getVncExe = () => {\n apiDownload({}, \"support/getVncExe\", true);\n }\n\n return (\n <>\n <Layout className=\"layout\">\n\n <LayoutHeader\n title=\"Remote Support\"\n description=\"Use this page to remotely connect with support.\"\n button={<Button size=\"small\" onClick={() => getVncExe()} type=\"primary\"><small>Download remote support aid</small></Button>}\n />\n\n <Layout.Content style={{\"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n \n <Typography.Paragraph type=\"secondary\">\n Bookmanager Remote Support is an app that will allow you to give a specified Bookmanager support person permission to connect to your computer. Once connected, both you and one of our wizards can work interactively and assist you with technical support and advice. You must first contact our office by phone to ensure that someone is available to connect to your computer.\n </Typography.Paragraph>\n <Alert type=\"info\" description={<>NOTE: We can only access your computer when you launch Remote Support and then double-click on the person who will be assisting you. At any time during a session you can disconnect us from your computer.</>} />\n <br />\n <Typography.Paragraph type=\"secondary\">\n Remote Support is based on UltraVNC SingleClick, which is licensed under the <a target=\"_blank\" href=\"https://bookmanager.com/license/gpl-2.0.txt\">GPLv2</a>. The source code is available <a target=\"_blank\" href=\"https://bookmanager.com/download/SCII.zip\">here</a>, and is not required to run the program.\n </Typography.Paragraph>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport InfiniteScroll from \"react-infinite-scroll-component\";\nimport { Divider, Input } from \"antd\";\nexport default function Iscroller(props) {\n\n const { opened = \"\", item_key=\"\", check= () => {}, refine=\"\", data = [], stepSize = 100, interator = () => { } } = props;\n const [current, setCurrent] = useState(stepSize);\n const [more, setMore] = useState(data.length > current);\n\n // synthetic - not a fan of this... \n const [filters, setFilters] = useState(data);\n\n const sortFilters = () =>{\n\n let f = [...data].sort((a, b) => {\n return (check(a.v, item_key) === check(b.v, item_key))? 0 : check(a.v, item_key)? -1 : 1;\n });\n\n setFilters(f)\n }\n\n useEffect(sortFilters, [opened])\n\n\n const filterData = () => {\n\n let _refine = refine.toUpperCase(); \n \n if(_refine){\n return filters.filter(item => {\n let {e = \"\", v = \"\"} = item; \n v = v.toUpperCase(); \n e = e.toUpperCase(); \n \n if(v.substr(0, _refine.length) === _refine || e.substr(0, _refine.length) === _refine){\n return true;\n }\n if(v.includes(\" \" + _refine) || e.includes(\" \" + _refine)){\n return true; \n }\n return false;\n })\n }\n return filters; \n }\n\n return (<>\n \n <InfiniteScroll\n dataLength={filterData().slice(0, current).length}\n next={() => {\n console.log(\"called\");\n setCurrent(current + stepSize);\n }}\n hasMore={true}\n height={(filterData().length>13) ? 300 : false}\n style={{\"maxHeight\" : \"300px\"}}\n >\n \n {filterData().slice(0, current).map(item => {\n return interator(item);\n })}\n </InfiniteScroll>\n </>\n )\n\n\n}","import { Button, Space, Row, Col, Tooltip, Input, Divider } from \"antd\";\nimport React, { useState } from \"react\";\nimport DropMenu from \"../../components/DropMenu\";\nimport { CloseOutlined, CheckSquareFilled, CloseSquareFilled, LineOutlined, MenuOutlined, CheckOutlined } from '@ant-design/icons';\nimport { bestsellerColor, successColor } from \"../../utils/Utils\";\nimport Iscroller from \"../../components/Iscroller\";\nexport default function AnalyticsFilters(props) {\n\n const { resetButton = () => { }, row_count = 0, grouping = \"\", setGrouping = () => { }, getAnalytics = () => { }, map = {}, searchFilters = {}, setSearchFilters = () => { }, headers = { groupby_labels: { \"test\": [\"test\"] } } } = props;\n\n const [refine, setRefine] = useState(\"\");\n const [changed, setChanged] = useState(false)\n const [vistoggle, setVistoggle] = useState(\"\");\n const [opened, setOpened] = useState(\"\");\n\n const check = (_filter, _key, _excluded = false) => {\n if (_excluded) {\n _filter = \"-\" + _filter;\n }\n if (searchFilters.hasOwnProperty(_key) && searchFilters[_key].includes(_filter)) {\n return true;\n } else {\n return false;\n }\n }\n\n const checkAny = (_key, _exclude = false) => {\n\n if (searchFilters.hasOwnProperty(_key) && searchFilters[_key].length > 0) {\n\n if (searchFilters[_key][0].substr(0, 1) === \"-\") {\n if (_exclude) { return true; }\n } else {\n if (!_exclude) { return true; }\n }\n }\n return false;\n }\n\n\n\n\n const toggleCategory = (_key, _filter, _augment = false, _exclude = false, go = false) => {\n\n\n let value = (searchFilters.hasOwnProperty(_key)) ? [...searchFilters[_key]] : []\n\n if (_exclude) {\n if (value.includes(\"-\" + _filter)) {\n value = [...searchFilters[_key]].filter(item => item !== \"-\" + _filter);\n } else {\n value.push(\"-\" + _filter);\n }\n } else {\n if (value.includes(_filter)) {\n value = [...searchFilters[_key]].filter(item => item !== _filter);\n } else {\n value.push(_filter);\n }\n }\n\n if (!_augment) {\n value = [_filter];\n }\n\n\n setSearchFilters({ ...searchFilters, [_key]: value });\n setChanged(true);\n\n if (go) {\n getAnalytics({ ...searchFilters, [_key]: value });\n setVistoggle(\"close\");\n }\n\n\n return;\n\n }\n\n const resetFilter = (_key) => {\n setSearchFilters({ ...searchFilters, [_key]: [] });\n getAnalytics({ ...searchFilters, [_key]: [] });\n setVistoggle(\"close\");\n }\n\n const drawOptions = (_key) => {\n\n return (\n\n <div style={{ \"float\": \"right\", \"fontWeight\": \"normal\", \"color\": \"#ccc\", \"fontSize\": \"9px\", \"marginRight\": \"0px\", \"marginTop\": \"0px\" }}>\n\n <Space size={3}>\n <div className=\"ant-radio-group-solid ant-radio-group-small\">\n <Button type={(grouping === _key) ? \"primary\" : \"default\"} onClick={() => { setGrouping(_key); setChanged(true); setVistoggle(\"close\"); getAnalytics(searchFilters, _key); }} style={{ \"borderRight\": \"none\", \"borderRadius\": \"2px 0 0 2px\" }} className=\"tiny-radio\" >\n <Tooltip mouseEnterDelay={0.5} title={<>Separate rows</>}>\n <small><MenuOutlined /></small>\n </Tooltip>\n </Button>\n <Button type={(grouping !== _key) ? \"primary\" : \"default\"} onClick={() => { setGrouping(\"\"); setChanged(true); setVistoggle(\"close\"); getAnalytics(searchFilters, \"\"); }} style={{ \"borderRadius\": \"0 2px 2px 0\" }} className=\"tiny-radio\" >\n <Tooltip mouseEnterDelay={0.5} title={<>Amalgamate rows</>}>\n <small><LineOutlined /></small>\n </Tooltip>\n </Button>\n </div>\n <Col flex={\"25px\"}>\n <Button disabled={(!changed)} onClick={() => {\n getAnalytics();\n setVistoggle(\"close\");\n\n }} style={{ \"padding\": \"0px 7px\", \"marginTop\": \"0px\" }} size=\"small\" type=\"primary\" className=\"tiny-btn\"><small>Go!</small></Button>\n </Col>\n <Button style={{ \"marginTop\": \"0px\" }} onClick={() => resetFilter(_key)} disabled={!(searchFilters.hasOwnProperty(_key) && searchFilters[_key].length > 0)} size=\"small\" className=\"tiny-btn\" type=\"primary\"><small>Reset</small></Button>\n\n </Space>\n </div>\n )\n }\n\n\n const drawFilter = (_filter, _key) => {\n\n let _included = check(_filter.v, _key);\n let _excluded = check(_filter.v, _key, true);\n\n let any_included = checkAny(_key);\n let any_excluded = checkAny(_key, true);\n\n let count = (searchFilters.hasOwnProperty(_key)) ? searchFilters[_key].length : 0;\n\n let hasEnglish = (_filter.hasOwnProperty(\"e\"));\n\n return (\n <Row key={_filter.v}>\n <Col flex={\"auto\"}><div style={{ \"maxWidth\": \"160px\", \"overflow\": \"hidden\", \"whiteSpace\": \"nowrap\", \"textOverflow\": \"ellipsis\", \"cursor\": \"pointer\" }} onClick={() => toggleCategory(_key, _filter.v, false, false, true)}><small>{(hasEnglish) ? _filter.e : _filter.v}</small></div></Col>\n <Col flex={\"50px\"} >\n <div style={{ \"float\": \"right\", \"marginRight\": \"12px\" }}>\n <Space size={2}>\n <div><CloseSquareFilled onClick={() => toggleCategory(_key, _filter.v, true, true)} key={\"exclude\"} style={{ \"color\": (_excluded) ? bestsellerColor : \"#bbb\", \"opacity\": (!any_included) ? \"1\" : \"0.2\", \"pointerEvents\": (!any_included) ? \"auto\" : \"none\" }} /></div>\n <div><CheckSquareFilled onClick={() => toggleCategory(_key, _filter.v, true, false)} key={\"include\"} style={{ \"color\": (_included) ? successColor : \"#bbb\", \"opacity\": (!any_excluded) ? \"1\" : \"0.2\", \"pointerEvents\": (!any_excluded) ? \"auto\" : \"none\" }} /></div>\n </Space>\n </div>\n </Col>\n </Row>);\n\n }\n\n const drawFilters = (_key) => {\n\n if (!headers.seen.hasOwnProperty(_key)) {\n return (<></>);\n }\n\n return (\n\n <Iscroller\n refine={refine}\n opened={opened}\n check={check}\n item_key={_key}\n data={headers.seen[_key]}\n interator={(item) => {\n return drawFilter(item, _key)\n }}\n />\n )\n\n return\n\n }\n\n\n const toggleGrouping = (_key) => {\n if (grouping !== _key) {\n setGrouping(_key)\n getAnalytics(searchFilters, _key);\n } else {\n setGrouping(\"\");\n getAnalytics(searchFilters, \"\");\n }\n\n }\n\n\n const findLabel = (_key, _value) => {\n\n // Remove the fist char if it's a dash - (excluded)\n if (_value[0] === '-') {\n _value = _value.slice(1);\n }\n\n let ret = headers.seen[_key].find(item => item.v === _value);\n if (ret) {\n\n if (ret.hasOwnProperty(\"e\")) {\n return ret.e;\n } else {\n return _value;\n }\n } else {\n return _value;\n }\n }\n\n\n const drawSelectionToolTip = (_key) =>{\n let ret = \"\";\n switch(_key){\n case \"rcvdmonth\":\n ret = \"Filter the results by adding and hiding selected items. Breakdown the results by the date the goods were initially received\";\n break;\n case \"specord\":\n ret = \"Filter the results by adding and hiding selected items. S/O are items that were both ordered for and sold to the same customer (i.e. a special order). \";\n break;\n default:\n ret = \"Filter the results by adding and hiding selected items. \";\n break\n }\n return(<small>{ret}</small>)\n }\n\n const drawLabelToolTip = (_key, _open = false) =>{\n let ret = \"\";\n switch(_key){\n case \"rcvdmonth\":\n ret = \"Filter the results by adding and hiding selected items. Breakdown the results by the date the goods were initially received\";\n break;\n case \"specord\":\n ret = \"Filter the results by adding and hiding selected items. S/O are items that were both ordered for and sold to the same customer (i.e. a special order). \";\n break;\n default:\n ret = (_open) ? \"Group the results as one row\" : \"Separate the results into individual rows\";\n break\n }\n return(<small>{ret}</small>)\n }\n\n\n const drawBrowseLabel = (_key) => {\n let ret = \"\";\n if (searchFilters.hasOwnProperty(_key) && searchFilters[_key].length > 0) {\n // check if included or excluded\n let inc = (searchFilters[_key][0][0] === '-') ? \"excluded\" : \"included\";\n if (searchFilters[_key].length > 1) {\n ret = searchFilters[_key].length + \" \" + inc;\n } else {\n ret = findLabel(_key, searchFilters[_key][0]) || \"1 \" + inc;\n }\n } else {\n ret = \"Choose...\";\n }\n return (<div style={{ \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }}><Tooltip title={drawSelectionToolTip(_key)}><nobr>{ret}</nobr></Tooltip></div>)\n }\n\n const drawGroupByLabels = () => {\n\n if (!headers.groupby_labels) {\n return;\n }\n\n\n let _filtered = Object.keys(headers.groupby_labels);\n\n \n\n return _filtered.map(key => {\n\n\n // return if there is no data... \n if (!row_count) {\n return (<></>)\n }\n\n let label = headers.groupby_labels[key];\n\n \n\n let count = (headers.groupby.hasOwnProperty(key)) ? headers.groupby[key].inc.length + headers.groupby[key].exc.length : \"\"\n\n if (label) {\n return (\n <div className=\"bc\" style={{ \"border\": '1px solid', \"width\" : \"100%\" }}>\n <div>\n <div style={{ \"textAlign\": \"center\", \"display\": \"block\", \"padding\": \"3px 10px\" }}><a onClick={() => toggleGrouping(key)} style={{ \"color\": \"#177ddc\", \"fontWeight\": (grouping === key) ? \"bold\" : \"normal\" }}><small><Tooltip title={drawLabelToolTip(key, (grouping === key))}><nobr>{((grouping === key) && <><CheckOutlined />  </>)}{label}</nobr></Tooltip></small></a></div>\n <div style={{ \"backgroundColor\": \"#177ddc\", \"color\": \"#fff\", \"cursor\": \"pointer\" }}>\n <DropMenu onOpen={() => {\n setOpened(key);\n }} custom_button selected={(key === grouping || count)} vistoggle={vistoggle} setVistoggle={setVistoggle} onClose={() => {\n if (changed) {\n if (!vistoggle) {\n getAnalytics();\n }\n }\n setChanged(false);\n setOpened(\"\");\n setRefine(\"\");\n\n }} label={<div style={{\"maxWidth\" : \"100%\", \"overflow\" : \"hidden\"}} className=\"c\">{drawOptions(key)} <nobr><strong>{label}</strong></nobr></div>} title={<div style={{ \"padding\": \"5px 0px\", \"textAlign\": \"center\" }}>{drawBrowseLabel(key)}</div>}>\n <Input autoFocus value={refine} onChange={(e) => setRefine(e.target.value)} size=\"small\" placeholder=\"Keyword...\" />\n\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div className=\"c\">{drawFilters(key)}</div>\n </DropMenu>\n </div>\n </div>\n </div>\n\n )\n\n }\n\n })\n\n }\n\n\n\n return (\n <>\n <div style={{ \"marginTop\": \"-10px\" }}>\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"stretch\", \"gap\" : \"2px\" }}>\n {drawGroupByLabels()} \n </div>\n <div>{resetButton()}</div>\n </div>\n <div className=\"shim\" />\n </>\n )\n\n}","import { Row, Col, Tooltip, Space, Modal } from \"antd\";\nimport React from \"react\";\nimport { addCommas } from \"../../utils/Utils\";\nimport Html from \"../../utils/Html\";\nimport moment from \"moment\";\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n\nexport default function AnalyticsDetails(props) {\n\n const { filters = {}, data = {} } = props;\n\n\n const getSet = (_key, _prev = false) => {\n let _set = \"price\";\n switch (filters.show_which) {\n case \"dollars\":\n _set = \"dollars\"\n break;\n case \"unit_copies\":\n _set = \"units\"\n break;\n case \"unique_isbns\":\n _set = \"titles\"\n break;\n }\n if (_prev) {\n return data.prev[_set][_key];\n }\n return data[_set][_key];\n }\n\n // Sales Data\n let sales = {\n label: \"Sales\",\n total: getSet(\"sandr_total\", false),\n prev_total: getSet(\"sandr_total\", true),\n prev_per: (filters.show_which === \"dollars\") ? (365 / data.this_slice_days * data.prev.profit / getSet(\"onhand_days\", true)).toFixed(1) : \"<small>n/a</small>\",\n prev_grp: data.prev.sandr_percentage\n }\n\n sales.per = (filters.show_which === \"dollars\") ? (365 / data.this_slice_days * data.profit / getSet(\"onhand_days\", false)).toFixed(1) : \"<small>n/a</small>\";\n sales.grp_per = data.sandr_percentage;\n sales.diff_total = sales.total - sales.prev_total\n sales.diff_per = Math.round((sales.total - sales.prev_total) / sales.prev_total * 100);\n\n // Sales Styles\n sales.total = `<span style=\"color:#0089ae;\"><strong>` + addCommas(sales.total) + `</strong></span>`;\n let _color = (sales.diff_per > 0) ? \"inherit\" : \"#d13232\";\n sales.diff_per = `<span style=\"color:` + _color + `;\">` + addCommas(sales.diff_per) + `%</span>`;\n sales.prev_total = `<span style=\"color:#0089ae;\"><strong>` + addCommas(sales.prev_total) + `</strong></span>`;\n _color = (sales.diff_total > 0) ? \"inherit\" : \"#d13232\";\n sales.diff_total = `<span style=\"color:` + _color + `;\">` + addCommas(sales.diff_total) + `</span>`;\n sales.per = `<span>` + addCommas(sales.per) + `<small> profit index</small></span>`;\n sales.prev_per = `<span>` + addCommas(sales.prev_per) + `<small> profit index</small></span>`;\n\n\n // Profit Data\n let profit = {\n label: \"Profit\",\n total: data.profit,\n prev_total: data.prev.profit,\n prev_per: data.prev.profit_margin,\n prev_grp: (filters.show_which === \"dollars\") ? data.prev.profit_percentage : `<small>n/a</small>`,\n }\n\n profit.per = data.profit_margin\n profit.grp_per = (filters.show_which === \"dollars\") ? data.profit_percentage : `<small>n/a</small>`;\n profit.diff_total = profit.total - profit.prev_total\n profit.diff_per = Math.round((profit.total - profit.prev_total) / profit.prev_total * 100);\n\n // Profit Styles\n profit.total = `<span style=\"color:green;\"><strong>` + addCommas(profit.total) + `</strong></span>`;\n _color = (profit.diff_per > 0) ? \"inherit\" : \"#d13232\";\n profit.diff_per = `<span style=\"color:` + _color + `;\">` + addCommas(profit.diff_per) + `%</span>`;\n profit.prev_total = addCommas(profit.prev_total);\n _color = (profit.diff_total > 0) ? \"inherit\" : \"#d13232\";\n profit.diff_total = `<span style=\"color:` + _color + `;\">` + addCommas(profit.diff_total) + `</span>`;\n _color = \"green\";\n profit.per = `<span><span style=\"color:` + _color + `;\"><strong>` + addCommas(profit.per) + `</span></strong><small> % pm</small></span>`;\n profit.prev_per = `<span>` + addCommas(profit.prev_per) + `<small> % pm</small></span>`;\n\n\n\n //Cur onhand\n\n let current = {\n label: \"Cur onhand\",\n total: getSet(\"onhand_total\", false),\n prev_total: getSet(\"onhand_total\", true),\n prev_per: data.prev.units.avg_ohage,\n prev_grp: data.prev.onhand_percentage\n }\n\n current.per = data.units.avg_ohage;\n current.grp_per = data.onhand_percentage;\n current.diff_total = current.total - current.prev_total\n current.diff_per = Math.round((current.total - current.prev_total) / current.prev_total * 100);\n\n // Cur Styles\n current.total = addCommas(current.total)\n _color = (current.diff_per > 0) ? \"inherit\" : \"#d13232\";\n current.diff_per = `<span style=\"color:` + _color + `;\">` + addCommas(current.diff_per) + `%</span>`;\n current.prev_total = addCommas(current.prev_total);\n _color = (current.diff_total > 0) ? \"inherit\" : \"#d13232\";\n current.diff_total = `<span style=\"color:` + _color + `;\">` + addCommas(current.diff_total) + `</span>`;\n _color = \"green\";\n current.per = `<span>` + addCommas(current.per) + `<small> days old</small></span>`;\n current.prev_per = `<span>` + addCommas(current.prev_per) + `<small> days old</small></span>`;\n\n\n\n //Avg onhand\n\n let average = {\n label: \"Avg onhand\",\n total: getSet(\"onhand_days\", false),\n prev_total: getSet(\"onhand_days\", true),\n prev_per: getSet(\"turns\", true),\n prev_grp: (filters.show_which !== \"unique_isbns\") ? data.prev.onhand_days_percentage : `<small>n/a</small>`,\n }\n\n average.per = getSet(\"turns\", false)\n average.grp_per = (filters.show_which !== \"unique_isbns\") ? data.onhand_days_percentage : `<small>n/a</small>`;\n average.diff_total = average.total - average.prev_total\n average.diff_per = Math.round((average.total - average.prev_total) / average.prev_total * 100);\n\n // Avg Styles\n average.total = (average.total) ? addCommas(average.total) : \"<small>n/a</small>\"\n _color = (average.diff_per > 0) ? \"inherit\" : \"#d13232\";\n average.diff_per = (average.diff_per) ? `<span style=\"color:` + _color + `;\">` + addCommas(average.diff_per) + `%</span>` : \"<small>n/a</small>\";\n average.prev_total = addCommas(average.prev_total);\n _color = (average.diff_total > 0) ? \"inherit\" : \"#d13232\";\n average.diff_total = (average.diff_total) ? `<span style=\"color:` + _color + `;\">` + addCommas(average.diff_total) + `</span>` : \"<small>n/a</small>\"\n _color = \"green\";\n average.per = (average.per) ? `<span>` + average.per + `<small> turns</small></span>` : \"<small>n/a</small>\";\n average.prev_per = (average.prev_per) ? `<span>` + average.prev_per + `<small> turns</small></span>` : \"<small>n/a</small>\";\n\n\n //Received\n let received = {\n label: \"Received\",\n total: getSet(\"rcvd\", false),\n prev_total: getSet(\"rcvd\", true),\n prev_per: \"\", // Does not seem to have a value\n prev_grp: \"\", // Does not seem to have a value\n }\n\n received.per = \"\"; // Does not seem to have a value\n\n received.grp_per = \"\"; // Does not seem to have a value\n received.diff_total = received.total - received.prev_total\n received.diff_per = Math.round((received.total - received.prev_total) / received.prev_total * 100);\n\n // Received Styles\n received.total = (received.total) ? addCommas(received.total) : \"<small>n/a</small>\"\n _color = (received.diff_per > 0) ? \"inherit\" : \"#d13232\";\n received.diff_per = `<span style=\"color:` + _color + `;\">` + addCommas(received.diff_per) + `%</span>`;\n\n received.prev_total = addCommas(received.prev_total);\n _color = (average.diff_total > 0) ? \"inherit\" : \"#d13232\";\n received.diff_total = (received.diff_total) ? `<span style=\"color:` + _color + `;\">` + addCommas(received.diff_total) + `</span>` : \"<small>n/a</small>\"\n\n\n //Returns\n let returns = {\n label: \"Returns\",\n total: -getSet(\"rtrn\", false),\n prev_total: -getSet(\"rtrn\", true),\n prev_per: Math.round(getSet(\"rtrn\", true) / getSet(\"rcvd\", true) * 100),\n prev_grp: \"\", // Does not seem to have a value\n }\n\n returns.per = getSet(\"rtrn_percent\", false); //Math.round(getSet(\"rcvd\", false) / getSet(\"rtrn\", false));\n\n returns.grp_per = \"\"; // Does not seem to have a value\n returns.diff_total = returns.total - returns.prev_total\n returns.diff_per = -Math.round((returns.total - returns.prev_total) / returns.prev_total * 100);\n\n // Received Styles\n\n returns.total = (returns.total) ? addCommas(returns.total) : \"<small>n/a</small>\"\n _color = (returns.diff_per > 0) ? \"inherit\" : \"#d13232\";\n returns.diff_per = `<span style=\"color:` + _color + `;\">` + addCommas(returns.diff_per) + `%</span>`;\n\n returns.per = `<span>` + returns.per + `<small>% of rcv</small></span>`;\n returns.prev_per = `<span>` + returns.prev_per + `<small>% of rcv</small></span>`;\n\n returns.prev_total = addCommas(returns.prev_total);\n _color = (average.diff_total > 0) ? \"inherit\" : \"#d13232\";\n returns.diff_total = (returns.diff_total) ? `<span style=\"color:` + _color + `;\">` + addCommas(returns.diff_total) + `</span>` : \"<small>n/a</small>\"\n\n\n\n\n const drawRow = (_obj, _tooltip = \"\") => {\n\n\n\n return (\n <Row gutter={15} className=\"bc c\">\n <Col style={{ \"textAlign\": \"right\" }} flex={\"100px\"}>\n <small><em>{_obj.label}</em></small>\n </Col>\n\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"100px\"}>\n <Html html={_obj.total} />\n </Col>\n <Col flex={\"100px\"}>\n <Html html={_obj.diff_per} />\n </Col>\n <Col flex={\"100px\"}>\n <Html html={_obj.diff_total} />\n </Col>\n <Col flex={\"130px\"}>\n <Space><Html html={_obj.per} />{((_tooltip) && <small><QuestionCircleOutlined onClick={() => drawTipModal(_tooltip)} style={{ \"opacity\": \"0.6\", \"cursor\": \"pointer\" }} /></small>)}</Space>\n </Col>\n <Col flex={\"100px\"}>\n <Html html={_obj.grp_per} />\n </Col>\n\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"100px\"}>\n <Html html={_obj.prev_total} />\n </Col>\n <Col flex={\"130px\"}>\n <Space><Html html={_obj.prev_per} />{((_tooltip) && <small><QuestionCircleOutlined onClick={() => drawTipModal(_tooltip)} style={{ \"opacity\": \"0.6\", \"cursor\": \"pointer\" }} /></small>)}</Space>\n </Col>\n <Col flex={\"133px\"}>\n <Html html={_obj.prev_grp} />\n </Col>\n </Row>\n\n )\n\n }\n\n\n\n const drawTipModal = (_key) => {\n\n switch (_key) {\n case \"sales\":\n Modal.info({\n icon: false,\n content: <>\n <p>Profit for the period annualized (profit on sales / #days in the period x 365 days) then divided by the average onhand (at cost). The higher the index, the better. <br /><br /> Similar to Turns, except it factors in profitability. Low margin inventory needs to sell faster (higher turns) whereas high margin inventory can have lower sales (lower turns) but be equally valuable.</p>\n </>\n })\n break;\n\n case \"current_onhand\":\n Modal.info({\n icon: false,\n content: <>\n <p>How many days on average the current inventory has been sitting on the shelf unsold. <br /><br />Changing the period will not affect this average because we are looking at the current, as-of-this-moment inventory onhand.</p>\n </>\n })\n break;\n\n case \"avg_onhand\":\n Modal.info({\n icon: false,\n width: \"800px\",\n content: <>\n <p>The average turn rate in the book industry is around 3.0. This means that if you always stocked exactly 100 books in your store over a year, and at the end of the year you had sold 300 books, you take 300 units divided by the 100 unit daily average to arrive at 3.0 turns. Put another way, on average it took about 4 months to sell each book (12 months divided by 3.0 turns.) If you are able to cut your selection back to 50 books on average, but still managed to sell 300 books, 300 units divided by 50 units = 6.0 turns (or two months to sell each book.) In essence, higher turns require less inventory and therefore less cash outlay or borrowing.<br /><br />\n But wait, you say, bread at the grocery store sells out nearly every day, resulting in 365 turns! And we have to survive on 3 turns? The answer is that bread is sold for a tiny profit compared to books. The higher profit on books allows us to finance the costs of carrying the books for a longer period and also provide the space to display them.<br /><br />\n High turns are great in most cases, but they can also indicate that you might be able to increase your selection (to provide more variety or never be sold out) and generate still more sales. Similarly, low turns means you should really have a closer look at what is sitting on your shelf that does not really need to be there to generate sales. For example, you might buy 12 of something that sells one per month (1 turn). It might be better to have 3 in stock at any given time but aim never to be out (4 turns). If you took this to the extreme, you could try to stock just one copy and try to get a replacement copy as soon as it sold (12 turns). The problem with carrying only one copy is that you will never know if that customer wanted two copies or if there was another customer wanting one after the first was sold out. Those high turns look great (and keep your bank loan small) but you are also losing potential sales.<br /><br />\n Finally, it is important to know that product that has a high margin of profit (e.g. cost is $2 and sold at $10) can turn at a lower rate than items that have low margins (e.g. cost is $8 and sold at $10). You should not strive to have each category of product in your store (e.g. books, magazines and high margin giftware) turn at the same rate. Using the Profit Index factors in the margin and is probably a better rate to keep an eye on, and it can be used for an apples to apples comparison between different product types.</p>\n </>\n })\n break;\n }\n\n }\n\n const relDiff = (a, b) => {\n return 100 * Math.abs((a - b) / ((a + b) / 2));\n }\n\n const getUnit = () => {\n\n let ret = \"\";\n switch (filters.show_which) {\n case \"dollars\":\n ret = \"dollars\"\n break;\n case \"unit_copies\":\n ret = \"units\"\n break;\n case \"unique_isbns\":\n ret = \"titles\"\n break;\n }\n\n return ret;\n\n }\n\n return (\n <>\n <Row gutter={15} className=\"bc\">\n <Col flex={\"100px\"}>\n  \n </Col>\n <Col className=\"bc bcg3 c\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"530px\"}>\n <div style={{ \"fontSize\": \"13px\", \"fontWeight\": \"600\" }}><small><em>This Period</em></small></div>\n </Col>\n\n <Col className=\"bc bcg3 c\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"363px\"}>\n <div style={{ \"fontSize\": \"13px\", \"fontWeight\": \"600\" }}><small><em>Previous Year <span style={{ \"fontWeight\": \"normal\" }}>   {moment(data.prev.slice_datelow * 1000).format(\"ddd MMM D, YYYY\")} to {moment(data.prev.slice_datehigh * 1000).format(\"MMM D, YYYY\")}</span></em></small></div>\n </Col>\n </Row>\n\n <Row gutter={15} className=\"bc\" style={{ \"borderBottom\": '1px solid' }}>\n <Col flex={\"100px\"}>\n  \n </Col>\n\n <Col className=\"bc bcg3 c\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"100px\"}>\n <small><em>in {getUnit()}</em></small>\n </Col>\n <Col className=\"bcg3 c\" flex={\"100px\"}>\n <small><em>% chg</em></small>\n </Col>\n <Col className=\"bcg3\" flex={\"100px\"}>\n <small><em>$ chg</em></small>\n </Col>\n <Col className=\"bcg3 c\" flex={\"130px\"}>\n <small><em>Performance</em></small>\n </Col>\n <Col className=\"bcg3 c\" flex={\"100px\"}>\n <small><em>% of grp</em></small>\n </Col>\n\n <Col className=\"bc bcg3 c\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"100px\"}>\n <small><em>in {getUnit()}</em></small>\n </Col>\n <Col className=\"bcg3 c\" flex={\"130px\"}>\n <small><em>Performance</em></small>\n </Col>\n <Col className=\"bcg3 c\" flex={\"133px\"}>\n <small><em>% of grp</em></small>\n </Col>\n </Row>\n\n {drawRow(sales, \"sales\")}\n {drawRow(profit)}\n {drawRow(current, \"current_onhand\")}\n {drawRow(average, \"avg_onhand\")}\n <div className=\"shim\" /><div className=\"shim\" />\n {drawRow(received)}\n {drawRow(returns)}\n\n {/* {drawRow(\"Sales\", \n current.sales_total, \n relDiff(previous.sales_total,current.sales_total).toFixed(2), \n (current.sales_total - previous.sales_total))}\n {drawRow(\"Profit\")}\n {drawRow(\"Cur onhand\")}\n {drawRow(\"Avg onhand\")}\n {drawRow(<> </>)}\n {drawRow(\"Received\")}\n {drawRow(\"Returns\")} */}\n\n\n\n\n </>\n )\n}","import { Row, Col, Tooltip, Space } from \"antd\";\nimport React, { useState } from \"react\";\nimport { addCommas } from \"../../utils/Utils\";\nimport conditional from \"../../utils/conditional\";\nexport default function AnalyticsSales(props) {\n\n\n\n const { range = 0, high = 0, filters = {}, data = {}, getSet = () => { }, resetScale = false, includes = {}, setView = () => { } } = props;\n\n\n // On hand total normalized for use in graph\n let oht = getSet(data, \"onhand_total\");\n oht = (oht > 0) ? oht / 20 : 0;\n const localHigh = Math.max(getSet(data, \"sales_total\"), getSet(data, \"sandr_total\"), oht) || 0;\n\n const scaleHigh = (resetScale) ? localHigh : high;\n\n\n\n\n const salesrtrn_total = getSet(data, \"salesrtrn_total\");\n\n\n\n\n // SALES \n\n const sales_total = getSet(data, \"sales_total\");\n const sandr_total = getSet(data, \"sandr_total\");\n const sales_diff = getSet(data, \"sandr_total\", false) - getSet(data, \"sandr_total\", true);\n const sales_multiplier = (sales_diff > 0) ? 1 : -1;\n const sales_max_width = (sales_total / scaleHigh) * 100;\n\n\n const stock_total = getSet(data, \"onhand_total\", false);\n const stock_diff = getSet(data, \"onhand_total\", false) - getSet(data, \"onhand_total\", true);\n const stock_multiplier = (stock_diff > 0) ? 1 : -1;\n const stock_max_width = ((stock_total / (365 / range)) / scaleHigh) * 100;\n\n\n\n const onorder_total = getSet(data, \"onorder_total\", false);\n const onorder_diff = getSet(data, \"onorder_total\", false) / getSet(data, \"onhand_total\", true);\n const onorder_multiplier = (onorder_diff > 0) ? 1 : -1;\n const onorder_max_width = onorder_diff * stock_max_width;\n\n\n\n // const onorder_diff = getSet(data, \"onorder_total\", false) - getSet(data, \"onhand_total\", true);\n // const onorder_multiplier = (onorder_diff > 0) ? 1 : -1;\n // const onorder_max_width = ((onorder_total / (365 / range)) / scaleHigh) * 100;\n\n\n\n\n\n const received_total = getSet(data, \"rcvd\", false);\n const received_max_width = (received_total / scaleHigh) * 100;\n // const stock_diff = getSet(data, \"onhand_total\", false) - getSet(data, \"onhand_total\", true);\n // const stock_multiplier = (stock_diff > 0) ? 1 : -1;\n // const stock_max_width = ((stock_total / 15) / high) * 100;\n\n\n const pers = {\n // Sales\n sandr_total: getSet(data, \"sandr_total\", false) / sales_total,\n salesrtrn_total: getSet(data, \"salesrtrn_total\", false) / sales_total,\n profit: (filters.show_which === \"dollars\") ? data.profit / sales_total : 0,\n sales_new: getSet(data, \"sales_new\", false) / sales_total,\n salesrtrn_new: getSet(data, \"salesrtrn_new\", false) / sales_total,\n sales_mid: getSet(data, \"sales_mid\", false) / sales_total,\n salesrtrn_mid: getSet(data, \"salesrtrn_mid\", false) / sales_total,\n sales_old: getSet(data, \"sales_old\", false) / sales_total,\n sales_dead: getSet(data, \"sales_dead\", false) / sales_total,\n sales_prev_year: (sales_diff / sales_total) * 100 * -1,\n sales_space: (sales_diff / (sales_total - sales_diff)) * 100 * -1,\n sales_prev_diff: 100 - (sales_diff / sales_total) * 100 * -1,\n sales_prev_year_up: (sales_diff / sales_total) * 100 * sales_multiplier,\n sales_prev_diff_up: 100 - (sales_diff / sales_total) * 100 * sales_multiplier,\n\n // Stock\n onhand_scale: getSet(data, \"sandr_total\", false) / (getSet(data, \"onhand_total\", false) / getSet(data, \"turns\", false)) * 100,\n onhand_total: getSet(data, \"onhand_total\", false) / stock_total,\n onhand_new: getSet(data, \"onhand_new\", false) / stock_total,\n onhand_mid: getSet(data, \"onhand_mid\", false) / stock_total,\n onhand_old: getSet(data, \"onhand_old\", false) / stock_total,\n onhand_dead: getSet(data, \"onhand_dead\", false) / stock_total,\n onorder_total: getSet(data, \"onorder_total\", false) / stock_total,\n stock_prev_year : ((stock_total / (stock_total - stock_diff)) - 1) * 100 *-1 || 0,\n stock_prev_diff: 100 - (stock_diff / stock_total) * 100 * -1,\n stock_prev_year_up: (stock_diff / stock_total) * 100 * stock_multiplier,\n stock_prev_diff_up: 100 - (stock_diff / stock_total) * 100 * stock_multiplier,\n\n // Received\n received_total: getSet(data, \"rcvd\", false) / received_total,\n received_rtrn: getSet(data, \"rtrn\", false) / received_total,\n\n\n }\n\n\n const label = () => {\n let ret = \"\";\n switch (filters.show_which) {\n case \"dollars\": ret = \"cost\"; break\n case \"unit_copies\": ret = \"units\"; break\n case \"unique_isbns\": ret = \"isbns\"; break\n }\n return ret;\n }\n\n const getPer = (_lbl) => {\n if (pers.hasOwnProperty(_lbl)) {\n return pers[_lbl] * 100\n } else {\n return 0;\n }\n }\n\n const SBRow = (props) => {\n return (\n <div className=\"sb-row\">\n <div class=\"sb-bar-container\">\n {props.children}\n </div>\n </div>\n )\n }\n\n const SBSeg = (props) => {\n const [visible, setVisible] = useState(false);\n const { field = \"\", color = \"#fff\", height = \"10px\", className = \"\", tooltip = false, rel = false } = props;\n const handleMouse = (e, _show = false) => {\n e.preventDefault();\n e.stopPropagation();\n setVisible(!visible)\n }\n\n let seg = <div onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setView(field);\n }} onMouseOver={(e) => handleMouse(e, true)} onMouseOut={(e) => handleMouse(e, true)} className={\"sb-bar lighten \" + className} style={{ \"flex-basis\": getPer(field) + \"%\", \"backgroundColor\": color, \"height\": height }}>{props.children}</div>\n\n if (tooltip === \"hide\") {\n return seg;\n }\n return (\n <Tooltip title={drawOverlay(field, tooltip)} visible={visible}>{seg}</Tooltip>\n )\n }\n\n\n const drawReceivedOverlay = () => {\n\n let _overlay = [\n { key: addCommas(getSet(data, \"rcvd\", false, \"dollars\")), value: \"Received Total\" },\n { key: addCommas(-getSet(data, \"rtrn\", false)), value: \"Returns Total\" },\n { key: addCommas(getSet(data, \"rtrn_percent\", false)) + \"%\", value: \"Returns as a % of Received\" },\n ]\n return (\n <>\n <Row gutter={5}>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.key}</div>)\n })}\n </Col>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.value}</div>)\n })}\n </Col>\n </Row>\n </>\n )\n }\n\n\n const drawPreviousSalesOverlay = () => {\n\n let _overlay = [\n { key: addCommas((getSet(data, \"sandr_total\", false, \"dollars\") - getSet(data, \"sandr_total\", true, \"dollars\"))), value: \"Dollars\" },\n { key: addCommas((getSet(data, \"sandr_total\", false, \"unit_copies\") - getSet(data, \"sandr_total\", true, \"unit_copies\"))), value: \"Copies\" },\n { key: addCommas((getSet(data, \"sandr_total\", false, \"unique_isbns\") - getSet(data, \"sandr_total\", true, \"unique_isbns\"))), value: \"ISBNs\" },\n\n ]\n return (\n <>\n <div><strong>Sales Change From Last Year</strong></div>\n <Row gutter={5}>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.key}</div>)\n })}\n </Col>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.value}</div>)\n })}\n </Col>\n </Row>\n </>\n )\n }\n\n const drawPreviousStockOverlay = () => {\n\n let _overlay = [\n { key: addCommas((getSet(data, \"onhand_total\", false, \"dollars\") - getSet(data, \"onhand_total\", true, \"dollars\"))), value: \"Dollars\" },\n { key: addCommas((getSet(data, \"onhand_total\", false, \"unit_copies\") - getSet(data, \"onhand_total\", true, \"unit_copies\"))), value: \"Copies\" },\n { key: addCommas((getSet(data, \"onhand_total\", false, \"unique_isbns\") - getSet(data, \"onhand_total\", true, \"unique_isbns\"))), value: \"ISBNs\" },\n\n ]\n return (\n <>\n <div><strong>Onhand change from last year</strong></div>\n <Row gutter={5}>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.key}</div>)\n })}\n </Col>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.value}</div>)\n })}\n </Col>\n </Row>\n </>\n )\n }\n\n\n const drawReceived = () => {\n return (\n <>\n <SBRow>\n <SBSeg height=\"20px\" tooltip={drawReceivedOverlay()} field=\"received_total\" color=\"#808000\">\n <SBSeg rel field=\"received_rtrn\" tooltip={drawReceivedOverlay()} color=\"#505000\" height=\"10px\" />\n </SBSeg>\n </SBRow>\n </>\n )\n }\n\n const drawStock = () => {\n\n\n return (\n <>\n <SBRow>\n <SBSeg field=\"onhand_total\" color=\"#c25135\" />\n </SBRow>\n <SBRow>\n <SBSeg field=\"onhand_new\" color=\"#facbb4\" />\n <SBSeg field=\"onhand_mid\" color=\"#f8aa79\" />\n <SBSeg field=\"onhand_old\" color=\"#e78c41\" />\n <SBSeg field=\"onhand_dead\" color=\"#0c0703\" />\n </SBRow>\n </>\n )\n }\n\n\n const drawSales = () => {\n\n return (\n <>\n\n <SBRow>\n <SBSeg field=\"sandr_total\" color=\"#4a7682\">\n <SBSeg field=\"profit\" tooltip={<div><strong>Profit</strong><div>${addCommas(data.profit)}</div></div>} color=\"#000088\" height=\"5px\" />\n </SBSeg>\n <SBSeg field=\"salesrtrn_total\" color=\"#007682\" className=\"txtptrn\" />\n </SBRow>\n <SBRow>\n <SBSeg field=\"sales_new\" color=\"#b8d4e0\" />\n <SBSeg field=\"salesrtrn_new\" color=\"#00d4e0\" className=\"txtptrn\" />\n <SBSeg field=\"sales_mid\" color=\"#7cbbcf\" />\n <SBSeg field=\"salesrtrn_mid\" color=\"#00bbcf\" className=\"txtptrn\" />\n <SBSeg field=\"sales_old\" color=\"#47a1b9\" />\n <SBSeg field=\"sales_dead\" color=\"#000\" />\n </SBRow>\n </>\n );\n }\n\n\n const fieldToTitle = (_field) => {\n switch (_field) {\n\n case \"sandr_total\": return \"Sales Total\";\n case \"salesrtrn_total\": return \"Customer Returns Total\";\n case \"sales_new\": return \"Sales of Stock Under 31 Days Old\";\n case \"salesrtrn_new\": return \"Customer Returns of Stock Under 31 Days Old\";\n case \"sales_mid\": return \"Sales of Stock 31-274 Days Old\";\n case \"salesrtrn_mid\": return \"Customer Returns of Stock 31-274 Days Old\";\n case \"sales_old\": return \"Sales of Stock 275-365 Days Old\";\n case \"sales_dead\": return \"Sales of Stock Over 365 Days Old\";\n case \"onhand_total\": return \"Onhand Total\";\n case \"onhand_new\": return \"Onhands Under 31 Days Old\";\n case \"onhand_mid\": return \"Onhands 31-274 Days Old\";\n case \"onhand_old\": return \"Onhands 275-365 Days Old\";\n case \"onhand_dead\": return \"Onhands Over 365 Days Old\";\n case \"onorder_total\": return \"Onorder Total\";\n\n\n }\n }\n\n const drawOverlay = (_field = \"\", _tooltip = false) => {\n\n\n if (_tooltip === \"hide\") {\n return false;\n }\n\n if (_tooltip) {\n return _tooltip;\n }\n\n\n let _overlay = [\n { key: addCommas(getSet(data, _field, false, \"dollars\") || 0), value: \"Dollars\" },\n { key: addCommas(getSet(data, _field, false, \"unit_copies\") || 0), value: \"Copies\" },\n { key: addCommas(getSet(data, _field, false, \"unique_isbns\") || 0), value: \"ISBNs\" }\n ]\n\n return (\n <>\n <div><strong>{fieldToTitle(_field)}</strong></div>\n <Row gutter={5}>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.key}</div>)\n })}\n </Col>\n <Col>\n {_overlay.map(item => {\n return (<div>{item.value}</div>)\n })}\n </Col>\n </Row>\n </>\n )\n }\n\n\n return (\n <>\n \n \n\n {/* SALES */}\n <conditional.true value={includes.sales}>\n\n <>\n <Row gutter={30}>\n <Col flex={\"200px\"}>\n <Row>\n <Col flex={\"auto\"}>\n <div className=\"c\">Sales</div></Col>\n <Col flex={\"auto\"}>\n <div className=\"c\" style={{ \"textAlign\": \"right\" }}>{(filters.show_which === \"dollars\") ? \"$\" : \"\"}{addCommas(sandr_total)}\t<small>{(filters.show_which === \"dollars\") ? \"retail\" : label()}</small></div>\n </Col>\n </Row>\n </Col>\n <Col flex={\"auto\"}>\n <div style={{ \"width\": sales_max_width + \"%\" }}>\n <Row align=\"middle\">\n <Col flex={\"auto\"} style={{ \"height\": \"20px\" }}>\n {/* Previous Gain */}\n <div style={{ \"backgroundColor\": \"#00ff00\", \"position\": \"absolute\", \"zIndex\": \"1\", \"right\": \"0px\", \"top\": \"7px\", \"height\": \"6px\", \"float\": \"flex\", \"width\": (pers.sales_prev_year < 0) ? Math.max(-100, pers.sales_prev_year) * -1 + \"%\" : \"0%\" }}>\n <SBSeg field=\"sales_prev_year_up\" color={(sales_diff > 0) ? \"#00ff00\" : \"#d03333\"} height=\"5px\" tooltip={<>{drawPreviousSalesOverlay()}</>} />\n </div>\n {drawSales()}\n </Col>\n <Col flex={(pers.sales_space > 0) ? pers.sales_space + \"%\" : \"0%\"}>\n {/* Previous Loss */}\n <SBSeg field=\"sales_prev_year_up\" color={(sales_diff > 0) ? \"#00ff00\" : \"#d03333\"} height=\"5px\" tooltip={<>{drawPreviousSalesOverlay()}</>} />\n </Col>\n </Row>\n </div>\n </Col>\n </Row>\n <div className=\"shim\" />\n </>\n </conditional.true>\n\n\n {/* STOCK */}\n <conditional.true value={includes.inventory}>\n <>\n <Row gutter={30} >\n <Col flex={\"200px\"}>\n <Row>\n <Col flex={\"auto\"}>\n <div className=\"c\">Onhand</div></Col>\n <Col flex={\"auto\"}>\n <div className=\"c\" style={{ \"textAlign\": \"right\" }}>{(filters.show_which === \"dollars\") ? \"$\" : \"\"}{addCommas(stock_total)}\t<small>{label()}</small></div>\n </Col>\n </Row>\n </Col>\n <Col style={{ \"display\": \"flex\" }} flex={\"auto\"}>\n \n <div style={{ \"width\": stock_max_width + \"%\", \"display\": \"inline-block\" }}>\n <Row align=\"middle\">\n <Col flex={\"auto\"} style={{ \"height\": \"20px\" }}>\n {/* Previous Gain */}\n <div style={{ \"backgroundColor\": \"#00ff00\", \"position\": \"absolute\", \"zIndex\": \"1\", \"right\": \"0px\", \"top\": \"7px\", \"height\": \"6px\", \"float\": \"flex\", \"width\": (pers.stock_prev_year < 0) ? Math.max(-100, pers.stock_prev_year) * -1 + \"%\" : \"0%\" }}>\n <SBSeg field=\"received_prev_year_up\" color={\"#00ff00\"} height=\"5px\" tooltip={<>{drawPreviousStockOverlay()}</>} />\n </div>\n {drawStock()}\n </Col>\n <Col flex={(pers.stock_prev_year > 0) ? pers.stock_prev_year + \"%\" : \"0%\"}>\n {/* Previous Loss */}\n <SBSeg field=\"received_prev_year_up\" color={\"#d03333\"} height=\"5px\" tooltip={<>{drawPreviousStockOverlay()}</>} />\n </Col>\n </Row>\n\n </div>\n <div style={{ \"width\": onorder_max_width + \"%\", \"display\": \"inline-block\" }}>\n <Tooltip title={drawOverlay(\"onorder_total\")}><div className=\"lighten\" onClick={() => setView(\"onorder_total\")} style={{ \"backgroundColor\": \"#ff9900\", \"position\": \"relative\", \"height\": \"20px\" }}> </div></Tooltip>\n </div>\n\n\n </Col>\n </Row>\n <div className=\"shim\" />\n </>\n </conditional.true>\n\n\n {/* RECEIVED */}\n <conditional.true value={includes.receiving_returns}>\n <>\n <Row gutter={30} >\n <Col flex={\"200px\"}>\n <Row>\n <Col flex={\"auto\"}>\n <div className=\"c\">Received</div></Col>\n <Col flex={\"auto\"}>\n <div className=\"c\" style={{ \"textAlign\": \"right\" }}>{(filters.show_which === \"dollars\") ? \"$\" : \"\"}{addCommas(received_total)}\t<small>{label()}</small></div>\n </Col>\n </Row>\n </Col>\n <Col flex={\"auto\"}>\n <div style={{ \"width\": Math.min(received_max_width, 100) + \"%\" }}>\n <Row align=\"middle\">\n <Col flex={\"auto\"} style={{ \"height\": \"20px\" }}>\n {/* Previous Gain */}\n {drawReceived()}\n </Col>\n </Row>\n </div>\n </Col>\n </Row>\n <div className=\"shim\" />\n </>\n </conditional.true>\n\n </>\n )\n}","\nimport React, { useEffect, useState } from \"react\";\nimport { Table, Space, Button, Divider, Radio, message } from \"antd\";\nimport Paginate from \"../../components/Paginate\";\nimport { apiCall, apiDownload } from \"../../utils/Api\";\nimport { addCommas, fromUriHash, isNumeric } from \"../../utils/Utils\";\nimport Renderer from \"../../components/Renderer\";\nimport ItemLayouts from \"../../components/ItemLayouts\";\nimport { CloseOutlined, CloseCircleOutlined, PicLeftOutlined, MenuOutlined, AppstoreOutlined } from '@ant-design/icons';\nimport moment from \"moment-timezone\";\nimport Overlay from \"../../components/Overlay\";\nimport ListCreateExcel from \"../../components/lists/ListCreateExcel\";\nimport LazyLoad from \"react-lazyload\";\nimport conditional from \"../../utils/conditional\";\n\nexport default function AnalyticsTable(props) {\n\n const { grouptokens = [], parseSearchFilters = () => { }, grouping = \"\", searchFilters = {}, filters = {}, drilldown = \"sales_total\", setView = () => { }, item = {} } = props;\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 100, offset: 0 });\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState([]);\n const [htmlUrl, setHtmlUrl] = useState(\"\");\n\n const [data, setData] = useState({ rows: [], row_count: 0, temp_list_id: \"\" });\n const [expand, setExpand] = useState(false);\n\n const [display, setDisplay] = useState(\"list\");\n\n \n // Some fields are synthetic - need to switch to actual calls\n\n const openInBrowse = () => {\n window.open(\"/purchasing/browse/filter/x/\" + data.temp_list_id + \"/v/sequence\", \"blank\");\n }\n\n\n const drawGroupToken = (_token = grouptokens) => {\n\n\n if (grouptokens.length < 1) {\n return false;\n }\n\n let _g = grouptokens.find(item => item.group === grouping);\n if (_g) {\n return { [grouping]: { inc: [_g.grouping[0]], exc: [] } }\n }\n\n if (!grouptokens[0].group) {\n return false;\n }\n\n if (grouptokens[0].grouping.length < 1) {\n return false;\n }\n\n\n\n\n }\n\n\n\n\n\n\n const getFromSynthetic = (_column) => {\n let column = \"\";\n let start_date = item.slice_datelow;\n let end_date = item.slice_datehigh;\n\n switch (_column) {\n case \"sandr_total\":\n column = \"sales_total\";\n break;\n case \"sales_prev_year_up\":\n column = \"sales_total\";\n start_date = moment(start_date * 1000).add(-52, \"weeks\").unix();\n end_date = moment(end_date * 1000).add(-52, \"weeks\").unix();\n break;\n\n case \"received_prev_year_up\":\n column = \"onhand_total\";\n break;\n\n case \"received_total\":\n column = \"rcvd\";\n break;\n\n case \"received_rtrn\":\n column = \"rtrn\";\n break;\n\n default:\n column = _column;\n break;\n }\n return {\n column: column,\n start_date: start_date,\n end_date: end_date\n };\n }\n\n\n const getTitles = (_title) => {\n\n let synthetic = getFromSynthetic(drilldown);\n\n let obj = { ...filters }\n obj.drilldown_column = (_title) ? _title : synthetic.column;\n obj.start_date = moment(synthetic.start_date * 1000).format(\"YYYY-MM-DD\");\n obj.end_date = moment(synthetic.end_date * 1000).format(\"YYYY-MM-DD\");\n obj.group_by = parseSearchFilters(searchFilters);\n // NO VALUE FOR TABLE\n obj.grouping = JSON.stringify([]) // separate rows for field or amalgamate is empty array\n obj.limit = paginate.pagesize;\n obj.offset = paginate.offset;\n\n if (obj.hasOwnProperty(\"browse_filters\")) {\n\n obj.browse_filters = fromUriHash(obj.browse_filters);\n }\n\n // Request full titles on rows\n //obj.full_titles = true;\n\n \n\n setLoading(true);\n\n let token = drawGroupToken();\n\n\n if (token) {\n\n obj.group_by = { ...obj.group_by, ...token }\n }\n\n setHtmlUrl(objectToURL(obj));\n\n obj.full_titles = true;\n\n // encode\n obj.group_by = JSON.stringify(obj.group_by);\n\n apiCall(\"reports/analytics/getTitles\", obj, (_status, _result) => {\n if (_status) {\n setData(_result);\n } else {\n message.error(_result.error);\n }\n setLoading(false);\n })\n\n }\n\n useEffect(getTitles, [drilldown, paginate, display])\n\n const drilldowns = [\n\n 'sales_total',\n 'sales_new',\n 'sales_mid',\n 'sales_old',\n 'sales_dead',\n 'salesrtrn_total',\n 'salesrtrn_new',\n 'salesrtrn_mid',\n 'salesrtrn_old',\n 'salesrtrn_dead',\n 'onhand_total',\n 'onhand_new',\n 'onhand_mid',\n 'onhand_old',\n 'onhand_dead',\n 'onorder_total',\n 'rcvd',\n 'rtrn',\n\n ]\n\n\n const columns = [\n { title: <small></small>, key: \"blank\", dataIndex: \"blank\", width: \"10px\" },\n { title: <small>Sold</small>, key: \"sold\", dataIndex: \"sold\", width: \"50px\" },\n { title: <small>aOH</small>, key: \"cur_oh\", dataIndex: \"cur_oh\", width: \"50px\" },\n { title: <small>aOO</small>, key: \"cur_oo\", dataIndex: \"cur_oo\", width: \"50px\" },\n {\n title: <small>Price</small>, key: \"price\", dataIndex: \"price\", width: \"50px\", render: (e) => {\n return (e) ? e.toFixed(2) : \"\"\n }\n },\n {\n title: <small>Title</small>, key: \"title\", dataIndex: \"title\", render: (e, f) => {\n return <a onClick={() => expandCell(f)}>{e}</a>\n }\n },\n { title: <small>Author</small>, key: \"author\", dataIndex: \"author\" },\n { title: <small>Cat</small>, key: \"cat\", dataIndex: \"cat\", width: \"100px\" },\n { title: <small>Cat2</small>, key: \"cat2\", dataIndex: \"cat2\", width: \"100px\" },\n { title: <small>Supl</small>, key: \"scode\", dataIndex: \"scode\", width: \"80px\" },\n { title: <small>TtlRcv</small>, key: \"ttlrcvd\", dataIndex: \"ttlrcvd\", width: \"60px\" },\n { title: <small>Rtn</small>, key: \"rtrn\", dataIndex: \"rtrn\", width: \"50px\" },\n { title: <small>ISBN</small>, key: \"isbn\", dataIndex: \"isbn\", width: \"100px\" }\n\n ]\n\n\n const drawChildTable = (_record) => {\n\n\n return (\n <div className=\"hideHover bc\" style={{ \"margin\": \"0px 0px\", \"marginLeft\": \"-9px\", \"paddingLeft\": \"0px\", \"borderLeft\": \"1px solid\", \"marginTop\": \"0px\", \"overflowY\": \"hidden\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"margin\": \"0px -12px\", \"padding\" : \"12px\" }}>\n <Renderer>\n <ItemLayouts data={_record.title_obj} display={\"details2\"} />\n </Renderer>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </div>\n )\n }\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.isbn)) {\n setExpanded([_data.isbn]);\n } else {\n setExpanded([]);\n }\n }\n\n const objectToURL = (_obj) => {\n return Object.keys(_obj).map(key => {\n\n if (typeof _obj[key] === \"object\") {\n return key + '=' + JSON.stringify(_obj[key])\n } else {\n return key + '=' + _obj[key]\n }\n\n\n\n }).join('&');\n }\n\n\n\n\n\n\n\n const getTitle = (_key) => {\n\n let ret = \"\"\n switch (_key) {\n case \"sales_total\": ret = \"ISBNs sold in total\"; break;\n case \"sandr_total\": ret = \"ISBNs sold in total\"; break; // synthetic\n case \"sales_prev_year_up\": ret = \"ISBNs sold in total (\" + moment(item.slice_datehigh * 1000).add(-52, \"weeks\").format(\"YYYY\") + \")\"; break; // synthetic\n case \"sales_new\": ret = \"ISBNs sold that are under 31 days old\"; break;\n case \"sales_mid\": ret = \"ISBNs sold that are 31-274 days old\"; break;\n case \"sales_old\": ret = \"ISBNs sold that are 275-365 days old\"; break;\n case \"sales_dead\": ret = \"ISBNs sold that are 365 days old\"; break;\n case \"salesrtrn_total\": ret = \"ISBNs returned by customers in total\"; break;\n case \"salesrtrn_new\": ret = \"ISBNs under 31 days old returned by customer\"; break;\n case \"salesrtrn_mid\": ret = \"ISBNs 31-274 days old returned by customers\"; break;\n case \"salesrtrn_old\": ret = \"ISBNs 275-365 days old returned by customers\"; break;\n case \"salesrtrn_dead\": ret = \"ISBNs over 365 days old returned by customers\"; break;\n case \"onhand_total\": ret = \"ISBNs onhand in total\"; break;\n case \"received_prev_year_up\": ret = \"ISBNs onhand in total (\" + moment(item.slice_datehigh * 1000).add(-52, \"weeks\").format(\"YYYY\") + \")\"; break; // synthetic\n case \"onhand_new\": ret = \"ISBNs onhand under 31 days old\"; break;\n case \"onhand_mid\": ret = \"ISBNs onhand 31-274 days old\"; break;\n case \"onhand_old\": ret = \"ISBNs onhand 275-365 days old\"; break;\n case \"onhand_dead\": ret = \"ISBNs onhand over 365 days old\"; break;\n case \"onorder_total\": ret = \"ISBNs on order in total\"; break;\n case \"rcvd\": ret = \"ISBNs received in total\"; break;\n case \"received_total\": ret = \"ISBNs received in total\"; break; // synthetic\n case \"rtrn\": ret = \"ISBNs total returned to suppliers\"; break;\n case \"received_rtrn\": ret = \"ISBNs total returned to suppliers\"; break; // synthetic \n\n default: ret = \"\"; break;\n }\n\n return ret;\n\n }\n\n\n const downloadExcel = (_list_id) => {\n apiDownload({ list_id: _list_id }, \"reports/analytics/getDrilldownExcel\");\n }\n\n const drawComponents = () => {\n\n\n return (\n\n\n <div style={{ \"display\": \"inline-block\", \"marginLeft\": \"-10px\" }}>\n\n\n <Space>\n\n <Button shape=\"circle\" onClick={() => setView(\"\")} size=\"small\" type=\"text\" icon={<CloseCircleOutlined style={{ \"fontSize\": \"12px\", \"opacity\": \"0.7\" }} />} />\n <div style={{ \"fontWeight\": \"600\" }}>{addCommas(data.row_count)} {getTitle(drilldown)}</div>\n <div>|</div>\n {drawDisplaySelector()}\n <div>|</div>\n <Button onClick={() => openInBrowse()} className=\"mini-btn\" size=\"small\"><small>Browse</small></Button>\n <Button onClick={() => downloadExcel(data.temp_list_id)} className=\"mini-btn\" size=\"small\"><small>XLS</small></Button>\n <Button onClick={() => window.open(\"/table/\" + \"?isbns=false&\" + htmlUrl, \"_blank\")} className=\"mini-btn\" size=\"small\"><small>HTML</small></Button>\n <Button onClick={() => window.open(\"/table/\" + \"?isbns=true&\" + htmlUrl, \"_blank\")} className=\"mini-btn\" size=\"small\"><small>ISBNs</small></Button>\n <div>   </div>\n </Space>\n </div>\n )\n }\n\n\n const drawDisplaySelector = () => {\n\n return (\n <Space>\n <div><small>Display:</small></div>\n <Radio.Group buttonStyle=\"solid\" value={display} onChange={(e) => setDisplay(e.target.value)} size=\"small\">\n <Radio.Button value={\"details\"}><small><PicLeftOutlined /></small></Radio.Button>\n <Radio.Button value={\"list\"}><small><MenuOutlined /></small></Radio.Button>\n <Radio.Button value={\"cards\"}><small><AppstoreOutlined /></small></Radio.Button>\n </Radio.Group>\n </Space>\n )\n\n }\n\n\n return (\n <>\n\n \n {/* <Space>\n <Select placeholder=\"Select...\" onChange={(e) => getTitles(e)} style={{ \"width\": \"150px\" }}>\n {drilldowns.map(item => {\n return <Select.Option key={item} value={item}>{item}</Select.Option>\n })}\n </Select>\n </Space>\n <br /><br /> */}\n <div className=\"shim\" /><div className=\"shim\" />\n <div className=\"bc\" style={{ \"border\": \"1px solid\", \"margin\": \"0px -21px\", \"marginBottom\": \"-26px\" }}>\n <Paginate showing_right={true} precomponent={drawComponents()} showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={data.row_count} />\n\n\n {/* CARDS */}\n <conditional.true key={\"cards\"} value={(display === \"cards\")}>\n\n\n {/* <pre>\n {JSON.stringify(data.rows.map(item => item.title_obj), null, 2)}\n </pre> */}\n\n\n\n <div style={{ \"padding\": \"20px\" }}>\n {data.rows.map(item => item.title_obj).reduce((all, one, i) => {\n const ch = Math.floor(i / 5);\n all[ch] = [].concat((all[ch] || []), one);\n return all\n }, []).map((item_set, index) => {\n\n\n return (\n\n\n // <pre>{JSON.stringify(item_set.map((i, index) => (i) ? i.isbn : index), null, 2)}</pre>\n <div key={item_set[0].isbn + \"cards\"}>\n <Renderer>\n <ItemLayouts data={item_set} index={index} display={\"cards\"} />\n </Renderer>\n <Divider dashed />\n </div>\n )\n })}\n </div>\n </conditional.true>\n\n {/* DETAILS */}\n <conditional.true key={\"notcards\"} value={(display === \"details\")}>\n <div style={{ \"padding\": \"20px\" }}>\n {data.rows.map(item => item.title_obj).map((item, index) => {\n return <div key={item.eisbn + \"notcards\"}>\n <LazyLoad offset={500} once={true} height={360}>\n <div key={item.eisbn + \"ll\"}>\n <Renderer close={false}>\n <ItemLayouts data={item} display={\"details2\"} />\n </Renderer>\n <div className=\"borderBottom shim\" style={{ \"margin\": \"35px -20px\", \"borderBottomWidth\": \"6px\" }} />\n </div>\n </LazyLoad>\n </div>\n })}\n </div>\n </conditional.true>\n\n {/* LIST */}\n <conditional.true key={\"notcards\"} value={(display === \"list\")}>\n <Table\n size=\"small\"\n className=\"analyiticsTable\"\n rowKey=\"isbn\"\n pagination={false}\n columns={columns}\n dataSource={data.rows}\n loading={loading}\n // scroll={{ y: 500 }}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </conditional.true>\n <Paginate showSizeChanger={false} paginate={paginate} setPaginate={setPaginate} count={data.row_count} />\n </div>\n\n\n\n\n </>\n )\n}","import { Button, Divider, Space, Row, Col, Card, Spin } from \"antd\";\nimport moment from \"moment\";\nimport React, { useEffect, useState } from \"react\";\nimport AnalyticsDetails from \"./AnalyticsDetails\";\nimport AnalyticsGraph from \"./AnalyticsGraph\";\nimport AnalyticsSales from \"./AnalyticsSales\";\nimport AnalyticsTable from \"./AnaylticsTable\";\n\nexport default function AnaylticsGroup(props) {\n\n const { scale = false, change=\"\", index = \"\", parseSearchFilters = () => { }, searchFilters = {}, grouping = \"\", headers = {}, loading = false, getSet = () => { }, filters = {}, setFilters = () => { }, high = 0, data = {}, range = 0, row_count = 1, includes = {} } = props;\n const [resetScale, setResetScale] = useState(scale);\n const [view, setView] = useState(\"\");\n\n\n\n const toggleView = (_view) => {\n if(view === _view){\n setView(\"\")\n } else {\n setView(_view);\n }\n }\n\n useEffect(() => {\n setResetScale(scale);\n },[scale]);\n\n useEffect(() => {\n setView(\"\");\n },[change])\n\n const cycleValues = () => {\n let _set = \"\";\n switch (filters.show_which) {\n case \"dollars\": _set = \"unit_copies\"; break;\n case \"unit_copies\": _set = \"unique_isbns\"; break;\n case \"unique_isbns\": _set = \"dollars\"; break;\n }\n setFilters({ ...filters, \"show_which\": _set })\n }\n\n const findHeader = (_header) => {\n if (headers.groupby_labels.hasOwnProperty(_header)) {\n return headers.groupby_labels[_header];\n } else {\n return _header;\n }\n }\n\n const findLabel = (_key, _value) => {\n // Remove the fist char if it's a dash - (excluded)\n\n\n if (_value[0] === '-') {\n _value = _value.slice(1);\n }\n\n let ret = headers.seen[_key].find(item => item.v === _value);\n if (ret) {\n\n if (ret.hasOwnProperty(\"e\")) {\n return ret.e;\n } else {\n return _value;\n }\n } else {\n return _value;\n }\n }\n\n\n const drawGroupTokens = (_token = []) => {\n\n\n let _label = _token.filter(item => item.grouping.length > 0).map(item => {\n return (<div style={{ \"color\": \"#177ddc\" }}><strong>{findHeader(item.group)} : {item.grouping.map(i => findLabel(item.group, i)).join(\", \")}</strong></div>);\n })\n\n let _includes = _token.filter(item => item.includes.length > 0).map(item => {\n return (<div style={{ \"color\": \"green\" }}><strong>{findHeader(item.group)}</strong> : <small>{item.includes.map(i => findLabel(item.group, i)).join(\", \")}</small></div>)\n })\n\n let _excludes = _token.filter(item => item.excludes.length > 0).map(item => {\n return (<div style={{ \"color\": \"#c52738\" }}><strong>{findHeader(item.group)}</strong> : <small>{item.excludes.map(i => findLabel(item.group, i)).join(\", \")}</small></div>)\n })\n\n return (\n <div>\n {(_label.length > 0 && <div><Space>{_label}</Space></div>)}\n {(_includes.length > 0 && <div><Space>{_includes}</Space></div>)}\n {(_excludes.length > 0 && <div><Space>{_excludes}</Space></div>)}\n </div>\n )\n\n\n }\n\n const getWhichName = () => {\n let _set = \"\";\n switch (filters.show_which) {\n case \"dollars\": _set = \"Dollars\"; break;\n case \"unit_copies\": _set = \"Units\"; break;\n case \"unique_isbns\": _set = \"ISBNs\"; break;\n }\n return _set;\n }\n\n \n\n // if (data.hasOwnProperty(\"grouptokens\")) {\n // Object.keys(data.grouptokens).map(key => {\n // tokenKey = headers.groupby_labels[key][0]\n // tokenValue = data.grouptokens[key];\n // })\n // }\n\n\n\n return (\n <div index={index}>\n <Spin spinning={loading}>\n <div>\n <div>{drawGroupTokens(data.grouptokens)}</div>\n <Space>\n <strong className=\"c\">{moment(data.slice_datehigh * 1000).endOf(\"day\").diff(moment(data.slice_datelow * 1000).startOf(\"day\").add(-1, \"day\"), \"days\")} days {moment(data.slice_datelow * 1000).format(\"ddd MMM D-YY\")} to {moment(data.slice_datehigh * 1000).format(\"ddd MMM D-YY\")}</strong>\n <Button className=\"mini-btn\" onClick={() => cycleValues()} size=\"small\" ><small>Values : {getWhichName()}</small></Button>\n {((row_count > 1) && <Button className=\"mini-btn\" onClick={() => setResetScale(!resetScale)} size=\"small\" ><small>{(resetScale) ? \"Cancel rescale\" : \"Rescale\"}</small></Button>)}\n </Space>\n </div>\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n <AnalyticsSales range={range} setView={toggleView} includes={includes} resetScale={resetScale} getSet={getSet} high={high} filters={filters} data={data} />\n {/* Details */}\n {(includes.details &&\n <Row>\n <Col flex={\"200px\"}></Col>\n <Col flex={\"auto\"}>\n <div className=\"shim\" /><div className=\"shim\" />\n <AnalyticsDetails filters={filters} data={data} />\n </Col>\n </Row>\n )}\n\n {/* synthetic view: {view} */}\n {(view && <>\n <AnalyticsTable grouptokens={data.grouptokens} parseSearchFilters={parseSearchFilters} searchFilters={searchFilters} grouping={grouping} item={data} setView={toggleView} drilldown={view} filters={filters} />\n </>)}\n </Spin>\n \n <Divider />\n </div>\n\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Form, Row, Col, DatePicker, Space, Radio, message, Card, Result, Button, Checkbox, Divider, Tooltip, Select, Modal } from \"antd\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport moment from \"moment\";\nimport { apiCall, apiDownload } from \"../../utils/Api\";\nimport AnalyticsFilters from \"../analytics/AnalyticsFilters\";\nimport FormItem from \"antd/lib/form/FormItem\";\nimport DropMenu from \"../../components/DropMenu\";\nimport AnaylticsGroup from \"../analytics/AnalyticsGroup\";\nimport conditional from \"../../utils/conditional\";\nimport Paginate from \"../../components/Paginate\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\nimport { fromUriHash, pathToObj, pathToObject } from \"../../utils/Utils\";\nimport { WarningOutlined, FileExcelOutlined } from '@ant-design/icons';\nimport Cookies from \"js-cookie\";\nimport { useSession } from \"../../utils/Session\";\nexport default function AnalyticsPage() {\n\n\n const history = useHistory();\n const [session, setSession] = useSession();\n const location = useLocation();\n const [loading, setLoading] = useState(false);\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 50, offset: 0 });\n const [change, setChange] = useState(false);\n const [resetScale, setResetScale] = useState(false)\n\n // Default range is start-of month\n const browse_filters = pathToObject(location.pathname);\n\n\n const initFilters = {\n start_date: moment().add(-1, \"day\").startOf(\"month\").startOf(\"day\").unix(),\n end_date: moment().add(-1, \"day\").endOf(\"day\").unix(),\n show_which: \"dollars\",\n year_alignment: \"weekday\",\n period_spacing: \"\",\n date_period: \"Month to date (Calendar month)\",\n sort_by: \"sandr_total\",\n browse_filters: \"\"\n }\n const [filters, setFilters] = useState({ ...initFilters, \"browse_filters\": browse_filters.v });\n\n const [grouping, setGroup] = useState(\"\");\n\n // overide for setting group to unset period spacing...\n const setGrouping = (_g) => {\n setGroup(_g);\n setFilters({ ...filters, \"period_spacing\": \"\" })\n }\n // Separated (so state changes don't trigger updates)\n\n const initIncludes = {\n sales: true,\n inventory: true,\n receiving_returns: true,\n details: true\n }\n\n const [includes, setIncludes] = useState(initIncludes);\n\n\n\n // Add an extra day to the count (startOf, endOf doesn't inc the day count)\n const range = moment(filters.end_date * 1000).endOf(\"day\").diff(moment(filters.start_date * 1000).add(-1, \"day\").startOf(\"day\"), \"days\");\n\n // Show yesterday, today in leau of date\n const customFormat = (value) => {\n let _diff = moment().startOf(\"day\").diff(value.startOf(\"day\"), \"days\");\n if (_diff === 1) { return \"Yesterday\"; }\n if (_diff === 1) { return \"Today\"; }\n return value.format(\"ddd MMMD-YY\");\n }\n\n // Dropdown presets (pre calculated ranges)\n const presets = [\n { label: \"1 Day\", value: 0 },\n { label: \"7 Days\", value: 6 },\n { label: \"30 Days\", value: 29 },\n { label: \"60 Days\", value: 59 },\n { label: \"90 Days\", value: 89 },\n { label: \"180 Days\", value: 179 },\n { label: \"365 Days\", value: 364 },\n { label: \"Month to date (Calendar month)\", value: \"Month to date (Calendar month)\" },\n { label: \"Quarter to date (Calendar quarter)\", value: \"Quarter to date (Calendar quarter)\" },\n { label: \"Year to date (Calendar year)\", value: \"Year to date (Calendar year)\" },\n ]\n\n\n\n const drawPreset = (_str) => {\n // Check if the first character is a number\n if (!isNaN(_str.charAt(0))) {\n return \"\";\n }\n // Remove text within brackets and the brackets\n const resultString = _str.replace(/\\([^)]*\\)/g, '');\n\n if (resultString) {\n return <>(<em>{resultString}</em>)</>\n } else {\n return \"\"\n }\n\n }\n\n const setPreset = (_preset) => {\n\n\n let sd;\n let date_period;\n // weird logic \n switch (_preset.label) {\n case \"Month to date (Calendar month)\":\n date_period = _preset.label;\n sd = moment(filters.end_date * 1000).diff(moment(filters.end_date * 1000).startOf(\"month\"), \"days\");\n break;\n\n case \"Quarter to date (Calendar quarter)\":\n date_period = _preset.label;\n sd = moment(filters.end_date * 1000).diff(moment(filters.end_date * 1000).startOf(\"quarter\"), \"days\")\n break;\n\n case \"Year to date (Calendar year)\":\n date_period = _preset.label;\n sd = moment(filters.end_date * 1000).diff(moment(filters.end_date * 1000).startOf(\"year\"), \"days\")\n break;\n\n default:\n date_period = \"\"\n sd = _preset.value\n break;\n }\n\n setFilters({ ...filters, \"date_period\": date_period, \"start_date\": moment(filters.end_date * 1000).add(-sd, \"days\").startOf(\"day\").unix() })\n }\n\n const [searchFilters, setSearchFilters] = useState({})\n\n const [results, setResults] = useState({\n headers: {},\n turnreport: {},\n results: {\n row_count: 0,\n total_count: 0,\n rows: []\n },\n datstock_timestamp: moment().unix()\n })\n\n const parseSearchFilters = (_f) => {\n\n let ret = { ..._f };\n\n Object.keys(ret).map(key => {\n let arr = ret[key];\n let _obj = {\n inc: [],\n exc: []\n }\n arr.forEach(element => {\n if (element.substr(0, 1) === \"-\") {\n // add to exclude\n _obj.exc.push(element.substr(1, element.length));\n } else {\n // add to include\n _obj.inc.push(element);\n }\n });\n\n if (_obj.exc.length > 0 || _obj.inc.length > 0) {\n ret[key] = _obj;\n } else {\n delete ret[key];\n }\n\n })\n\n return ret;\n\n }\n\n const getIterations = (_days) => {\n\n if (_days < 91) {\n return 30;\n }\n if (_days < 182) {\n return 24;\n }\n if (_days < 365) {\n return 12;\n }\n if (_days >= 365) {\n return 6;\n }\n\n }\n\n\n const exportToExcel = () => {\n getAnalytics(searchFilters, grouping, filters, 0, true);\n }\n\n\n const getAnalytics = (_sf = searchFilters, _grping = grouping, _fltrs = filters, _offset = 0, _export_excel = false) => {\n\n\n if (_sf !== searchFilters || _grping !== grouping || _fltrs !== filters) {\n // search stuff changed, reset offset\n _offset = 0;\n } else {\n _offset = paginate.offset;\n }\n\n let obj = {}\n obj.start_date = moment(_fltrs.start_date * 1000).format(\"YYYY-MM-DD\");\n obj.end_date = moment(_fltrs.end_date * 1000).format(\"YYYY-MM-DD\");\n obj.date_period = _fltrs.date_period;\n obj.group_by = JSON.stringify(parseSearchFilters(_sf));\n obj.grouping = (_grping) ? JSON.stringify([_grping]) : JSON.stringify([]); // separate rows for field or amalgamate is empty array\n\n\n obj.year_alignment = _fltrs.year_alignment;\n\n\n // For some reason labels are incorrect if you pass consecutive period spacing - select periods -> select class\n if (_grping) {\n obj.period_spacing = \"\"\n } else {\n obj.period_spacing = _fltrs.period_spacing; //consecutive, yearly, weekly\n }\n\n\n if (_fltrs.browse_filters) {\n obj.browse_filters = fromUriHash(_fltrs.browse_filters);\n }\n obj.sort_by = _fltrs.sort_by;\n\n\n // If there is period spacing or date_period, we don't use the start date , but use the date period strings instead\n if (obj.period_spacing || obj.date_period) {\n delete obj.start_date;\n\n // If there is period_spacing we want to show interative rows \n if (obj.period_spacing === \"weekly\") {\n obj.date_period = getIterations(range) + \" \" + range + \"day\";\n }\n\n if (obj.period_spacing === \"consecutive\") {\n\n switch (obj.date_period) {\n\n case \"Month to date (Calendar month)\":\n obj.date_period = \"30 Month\";\n break;\n\n case \"Quarter to date (Calendar quarter)\":\n obj.date_period = \"30 Quarter\";\n break;\n\n case \"Year to date (Calendar year)\":\n obj.date_period = \"6 Year\";\n break;\n\n default:\n obj.date_period = getIterations(range) + \" \" + range + \"day\";\n break;\n }\n\n }\n\n if (obj.period_spacing === \"yearly\") {\n obj.date_period = \"6 \" + range + \"day\";\n }\n\n }\n\n obj.limit = paginate.pagesize;\n obj.offset = _offset;\n\n\n\n if (_export_excel) {\n apiDownload(obj, \"reports/analytics/turnReportToExcel\", true);\n return;\n }\n\n setLoading(true);\n apiCall(\"reports/analytics/turnReport\", obj, (_status, _result) => {\n if (_status) {\n\n setChange(!change);\n if (!_offset) {\n setPaginate({ ...paginate, offset: _offset, current: 1 });\n }\n setResults(_result);\n } else {\n message.error(_result.error);\n }\n setLoading(false);\n })\n }\n\n useEffect(getAnalytics, [filters.start_date, filters.end_date, filters.year_alignment, filters.date_period, filters.sort_by, paginate.offset, paginate.pagesize]);\n\n\n // const updateOffset = () => {\n // getAnalytics(searchFilters, grouping, filters, paginate.offset)\n // }\n\n // useEffect(updateOffset, [paginate.offset])\n\n // fetch the data based on the filter (just makes things easier...)\n const getSet = (_data, _key, _prev = false, sw = filters.show_which) => {\n let _set = \"price\";\n switch (sw) {\n case \"dollars\":\n _set = \"dollars\";\n break;\n case \"unit_copies\":\n _set = \"units\";\n break;\n case \"unique_isbns\":\n _set = \"titles\";\n break;\n }\n if (_prev) { return _data.prev[_set][_key]; }\n return _data[_set][_key];\n }\n\n const getHigh = () => {\n\n let ret = Math.max(...results.results.rows.map(i => {\n let sales_total = getSet(i, \"sales_total\");\n let sandr_total = getSet(i, \"rcvd\");\n let onhand_total = getSet(i, \"onhand_total\");\n onhand_total = (onhand_total > 0) ? onhand_total / (365 / range) : 0;\n return Math.max(0, sales_total, sandr_total, onhand_total);\n }))\n\n return (ret > 0) ? ret : 0;\n\n }\n\n\n const resetAllButton = () => {\n\n return (\n <Button\n disabled={(JSON.stringify(includes) === JSON.stringify(initIncludes) && grouping === \"\" && JSON.stringify({}) === JSON.stringify(searchFilters) && JSON.stringify(initFilters) === JSON.stringify(filters))}\n onClick={() => {\n setGrouping(\"\");\n setSearchFilters({});\n setFilters({ ...initFilters, \"browse_filters\": \"\" });\n setIncludes(initIncludes)\n getAnalytics({}, grouping, { ...initFilters, \"browse_filters\": \"\" });\n history.push(\"/reports/analytics\");\n }} type=\"link\" size=\"small\"><small>Reset</small></Button>\n )\n }\n\n\n\n const drawSort = () => {\n\n\n\n\n let sortOptions = [\n { label: \"None\", value: \"none\" },\n { label: \"Sales Change\", value: \"sandr_change\" },\n { label: \"Sales\", value: \"sandr_total\" },\n { label: \"Profit\", value: \"profit\" },\n { label: \"Turns\", value: \"turns\" },\n { label: \"Onhand\", value: \"onhand_total\" },\n { label: \"Onhand - Older\", value: \"onhand_mid\" },\n { label: \"Onhand - Old\", value: \"onhand_old\" },\n { label: \"Received\", value: \"rcvd\" },\n { label: \"Returned\", value: \"rtrn\" },\n { label: \"Invoice\", value: \"invoice\" },\n ]\n\n\n\n return (\n <Select onChange={(e) => setFilters({ ...filters, \"sort_by\": e })} defaultValue={filters.sort_by} style={{ \"width\": \"130px\" }} size=\"small\">\n {sortOptions.map(item => {\n return (<Select.Option key={item.value} value={item.value}><small>{item.label}</small></Select.Option>)\n })}\n </Select>\n )\n }\n\n const resetButton = () => {\n\n return (\n <div>\n <div className=\"shim\" />\n <div className=\"shim\" />\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"space-between\" }}>\n\n {(!(grouping === \"\" && JSON.stringify({}) === JSON.stringify(searchFilters) && (results.results.row_count < 2)) &&\n <Button\n disabled={(grouping === \"\" && JSON.stringify({}) === JSON.stringify(searchFilters))}\n onClick={() => {\n setGrouping(\"\");\n setSearchFilters({});\n getAnalytics({}, \"\");\n }} type=\"primary\" danger size=\"small\"><small>Clear all filters</small>\n </Button>\n )}\n\n\n {/* Only show sort if there are Multiple rows */}\n {((results.results.row_count > 1) &&\n <Space>\n <Checkbox checked={!resetScale} onClick={() => setResetScale(!resetScale)} size=\"small\"><small>Relative scale</small></Checkbox>\n\n <div><small>Sort:</small></div>\n {drawSort()}\n </Space>\n )}\n\n </div>\n </div>\n )\n }\n\n\n const openWarning = (_auto = true) => {\n\n if (!browse_filters.v) {\n return;\n }\n\n let remember = Cookies.get(\"analytics_warning\");\n if (_auto && remember === \"true\") {\n return;\n }\n\n Modal.warn({\n icon: <></>,\n width: \"600px\",\n title: \"Analytics accuracy warning\",\n content: <>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <strong>Be aware that previous period comparisons may be misleading when ISBNs are loaded from Browse.</strong>\n <p>Browse Analytics is designed to draw on the activity from the <strong>specific set of ISBNs</strong> you have selected. If you choose to click on the option to compare previous periods, that comparison is still going to draw data from the exact same set of ISBNs. It is possible to run into inaccuracies here, because suppliers are always adding new ISBNs, changing the ISBNs of current product, or dropping old ISBNs.</p>\n <p><em><strong>For example:</strong> If the list of ISBNs you are looking at are all new releases, then the sales in the previous period will be zero because those ISBNs did not exist in the previous period.</em></p>\n <p><strong>For this reason, it is important to not gauge changes in the volume of sales and/or inventory by using Analytics with specific lists of ISBNs.</strong> The regular Analytics compares previous periods of data that has been selected via dynamic filters, and not a finite set of ISBNs. Because of that, previous period comparison within regular Analytics can contain ISBNs that are not part of the current period, and are therefore a more accurate representations of changes.</p>\n <div className=\"shim\" />\n {(_auto && <>\n <div>\n <Checkbox onChange={(e) => { let v = e.target.checked.toString(); Cookies.set(\"analytics_warning\", v, { expires: 365 }); }}>\n <small>Don't show this message again</small>\n </Checkbox>\n </div>\n </>)}\n </>\n })\n }\n\n useEffect(openWarning, [])\n\n const BrowseWarning = () => {\n\n\n\n\n\n\n return (<WarningOutlined onClick={() => openWarning(false)} style={{ \"color\": \"#ed2a45\", \"fontSize\": \"20px\", \"marginRight\": \"4px\", \"cursor\": \"pointer\" }} />)\n\n }\n\n const disabledEnding = (current) => {\n return current && current < moment(filters.start_date * 1000).add(-1, \"day\").endOf('day');\n };\n\n const disabledBeginning = (current) => {\n return current && current > moment(filters.end_date * 1000).endOf('day');\n };\n\n\n const getPresetToDate = (_date, _preset) => {\n\n switch (_preset) {\n case \"Month to date (Calendar month)\":\n const startOfMonth = moment(_date).startOf('month');\n return _date.diff(startOfMonth, 'days');\n break;\n\n case \"Quarter to date (Calendar quarter)\":\n const startOfQuarter = moment(_date).startOf('quarter');\n return _date.diff(startOfQuarter, 'days');\n break;\n\n case \"Year to date (Calendar year)\":\n const startOfYear = moment(_date).startOf('year');\n return _date.diff(startOfQuarter, 'days');\n break;\n\n default:\n return range - 1;\n break;\n }\n }\n\n\n\n const stripTextBetweenParentheses = (inputString) => {\n // strip the content between the parens\n const regex = /\\([^)]*\\)/g;\n\n let str = inputString.replace(regex, '').trim();\n if (!str) {\n return \"\";\n }\n return \"(\" + str + \")\"\n\n\n };\n\n\n\n const onPanelChange = (_e, _f) => {\n\n switch (filters.date_period) {\n case \"Month to date (Calendar month)\":\n setFilters({ ...filters, \"end_date\": _e.startOf(\"day\").unix(), \"start_date\" : _e.startOf(\"month\").startOf(\"day\").unix() })\n return;\n break;\n\n case \"Quarter to date (Calendar quarter)\":\n setFilters({ ...filters, \"end_date\": _e.startOf(\"day\").unix(), \"start_date\" : _e.startOf(\"quarter\").startOf(\"day\").unix() })\n return;\n break;\n\n case \"Year to date (Calendar year)\":\n setFilters({ ...filters, \"end_date\": _e.startOf(\"day\").unix(), \"start_date\" : _e.startOf(\"year\").startOf(\"day\").unix() })\n return;\n break;\n\n default:\n setFilters({ ...filters, \"end_date\": _e.startOf(\"day\").unix(), \"start_date\" : _e.add(-(range-1), \"days\").startOf(\"day\").unix() })\n return;\n break;\n }\n }\n\n\n const drawFilters = () => {\n\n return (\n <Form layout=\"vertical\" size=\"small\">\n <Space size={3}>\n\n <FormItem label={<small>Ending <span>({range.toString()} days)</span></small>}>\n <DatePicker onPanelChange={(e, f) => onPanelChange(e, f)} format={customFormat} onChange={(mom) => {\n console.log(disabledEnding(mom));\n // If ending is less that starting, shift the start-date by the range\n\n if (disabledEnding(mom)) {\n\n let _days = getPresetToDate(mom, filters.date_period);\n setFilters({ ...filters, \"end_date\": mom.startOf(\"day\").unix(), \"start_date\": mom.add(-_days, \"days\").endOf(\"day\").unix() })\n } else {\n\n // Only shift beginning date if date_period is not month, quarter, year\n if(filters.date_period){\n setFilters({ ...filters, \"end_date\": mom.startOf(\"day\").unix() })\n }\n else {\n setFilters({ ...filters, \"end_date\": mom.startOf(\"day\").unix(), \"start_date\": mom.add(-(range-1), \"days\").endOf(\"day\").unix() })\n }\n }\n \n\n\n\n }} value={moment(filters.end_date * 1000)} />\n </FormItem>\n <div> </div>\n <FormItem value={moment(filters.start_date * 1000)} label={<small>Beginning <span style={{ \"fontSize\": \"9px\" }}>{stripTextBetweenParentheses(filters.date_period)}</span></small>}>\n <DropMenu custom hover title={\n <DatePicker disabledDate={disabledBeginning} style={{ \"fontSize\": \"10px\" }} format={customFormat} onChange={(mom) => setFilters({ ...filters, \"date_period\": \"\", \"start_date\": mom.endOf(\"day\").unix() })} value={moment(filters.start_date * 1000)} />\n }>\n <Card style={{ \"width\": \"220px\", \"marginTop\": \"2px\" }} className=\"custom-shadow\">\n {presets.map((item, index) => {\n return (<div key={index} onClick={() => setPreset(item)}><a><small>{item.label}</small></a></div>)\n })}\n </Card>\n </DropMenu>\n </FormItem>\n <Divider dashed style={{ \"height\": \"60px\", \"marginBottom\": \"20px\" }} type=\"vertical\" />\n <Form.Item label={<small>Graph using:</small>} >\n\n <Space size={0}>\n <Radio onClick={() => setFilters({ ...filters, \"show_which\": \"dollars\" })} checked={(filters.show_which === \"dollars\")} ><small>Dollars</small></Radio>\n <Radio onClick={() => setFilters({ ...filters, \"show_which\": \"unit_copies\" })} checked={(filters.show_which === \"unit_copies\")} ><small>Units</small></Radio>\n <Radio onClick={() => setFilters({ ...filters, \"show_which\": \"unique_isbns\" })} checked={(filters.show_which === \"unique_isbns\")} ><small>ISBNs</small></Radio>\n </Space>\n\n </Form.Item>\n <Divider dashed style={{ \"height\": \"60px\", \"marginBottom\": \"20px\" }} type=\"vertical\" />\n <Form.Item label={<small>Graph to include:</small>}>\n {/* ant-radio-group-solid */}\n <Space size={0}>\n <Checkbox type=\"primary\" onClick={() => setIncludes({ ...includes, \"sales\": !includes.sales })} checked={(includes.sales)} ><small>Sales </small></Checkbox>\n <Checkbox onClick={() => setIncludes({ ...includes, \"inventory\": !includes.inventory })} checked={(includes.inventory)} ><small>Onhand</small></Checkbox>\n <Checkbox onClick={() => setIncludes({ ...includes, \"receiving_returns\": !includes.receiving_returns })} checked={(includes.receiving_returns)} ><small>Received</small></Checkbox>\n <Checkbox onClick={() => setIncludes({ ...includes, \"details\": !includes.details })} checked={(includes.details)} ><small>Details</small></Checkbox>\n </Space>\n </Form.Item>\n <Divider dashed style={{ \"height\": \"60px\", \"marginBottom\": \"20px\" }} type=\"vertical\" />\n <Form.Item label={<small>Show previous:</small>}>\n <Space size={0}>\n <Radio onClick={() => { setGrouping(\"\"); setFilters({ ...filters, \"period_spacing\": \"\" }); getAnalytics(searchFilters, \"\", { ...filters, \"period_spacing\": \"\" }); }} checked={(filters.period_spacing === \"\")} ><small>None</small></Radio>\n <Tooltip title={<small>Multiple graphs showing the same number of days immediately preceding each ending date.</small>}><Radio onClick={() => { setGrouping(\"\"); setFilters({ ...filters, \"period_spacing\": \"yearly\" }); getAnalytics(searchFilters, \"\", { ...filters, \"period_spacing\": \"yearly\" }); }} checked={(filters.period_spacing === \"yearly\")} ><small>Years</small></Radio></Tooltip>\n <Tooltip title={<small>Multiple graphs showing the same date range in the preceding year.</small>}><Radio onClick={() => { setGrouping(\"\"); setFilters({ ...filters, \"period_spacing\": \"consecutive\" }); getAnalytics(searchFilters, \"\", { ...filters, \"period_spacing\": \"consecutive\" }); }} checked={(filters.period_spacing === \"consecutive\")} ><small>Periods</small></Radio></Tooltip>\n <Tooltip title={<small>Multiple graphs showing the same days of the week in each previous week. <br />(e.g. A Friday through Sunday sales history, week by week)</small>}><Radio onClick={() => { setGrouping(\"\"); setFilters({ ...filters, \"period_spacing\": \"weekly\" }); getAnalytics(searchFilters, \"\", { ...filters, \"period_spacing\": \"weekly\" }); }} checked={(filters.period_spacing === \"weekly\")} disabled={!(range < 8)} ><small>Weeks</small></Radio></Tooltip>\n </Space>\n </Form.Item>\n <Divider dashed style={{ \"height\": \"60px\", \"marginBottom\": \"20px\" }} type=\"vertical\" />\n <Form.Item label={<small>Using same day of:</small>}>\n <Space size={0}>\n <Tooltip title={<small>The date range for each previous period can be either the same day(s) of the month or the same weekday(s)</small>}><Radio onClick={() => setFilters({ ...filters, \"year_alignment\": \"monthday\" })} checked={(filters.year_alignment === \"monthday\")} ><small>Month </small></Radio></Tooltip>\n <Tooltip title={<small>The date range for each previous period can be either the same day(s) of the month or the same weekday(s)</small>}><Radio onClick={() => setFilters({ ...filters, \"year_alignment\": \"weekday\" })} checked={(filters.year_alignment === \"weekday\")} ><small>Week</small></Radio></Tooltip>\n </Space>\n </Form.Item>\n\n\n\n </Space>\n </Form>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title={\n <>\n <Row>\n <Col flex=\"250px\">\n {(browse_filters.v) ? <><BrowseWarning /><Tooltip title={<small>Viewing analytics on titles from browse filters - Click reset to remove browse filters</small>}> Browse Analytics</Tooltip></> : \"Analytics\"}\n {resetAllButton()}\n </Col>\n <Col flex=\"auto\">\n <div style={{ \"textAlign\": \"center\", }}>\n <div style={{ \"display\": \"inline\", \"fontSize\": \"12px\", \"fontWeight\": \"normal\", \"border\": \"1px solid #eee\", \"padding\": \"5px 10px\", \"marginTop\": \"-5px\" }}>\n <strong> As of {moment(results.datstock_timestamp * 1000).format(\"h:mma dddd MMM Do, YYYY\")}. </strong> <em>Updated via your most recent <a onClick={() => window.open(\"/reports/backups\", \"_blank\")}>backup.</a></em>\n </div>\n </div>\n </Col>\n <Col flex=\"250px\">\n <div style={{ \"textAlign\": \"right\" }}>\n\n {((session.store_id === 182320) &&\n <Button type=\"primary\" onClick={() => exportToExcel()} size=\"small\"><small> <FileExcelOutlined /> Export to Excel</small></Button>\n )}\n\n </div>\n </Col>\n </Row>\n </>\n }\n filters={<>\n {drawFilters()}\n <Divider dashed style={{ \"marginTop\": \"-10px\" }} />\n <AnalyticsFilters resetButton={resetButton} row_count={results.results.rows.length} getAnalytics={getAnalytics} grouping={grouping} setGrouping={setGrouping} searchFilters={searchFilters} setSearchFilters={setSearchFilters} headers={results.turnreport} />\n <div className=\"shim\" />\n </>}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <conditional.true value={(!loading && results.results.rows.length < 1)}>\n <div style={{ \"padding\": \"20px\" }}>\n <Card>\n <Result\n status=\"warning\"\n title=\"No data available.\"\n />\n </Card>\n </div>\n </conditional.true>\n\n <conditional.true value={(results.results.row_count > paginate.pagesize)}>\n <Paginate pageSizeOptions={[20, 50, 100]} showSizeChanger={true} paginate={paginate} setPaginate={setPaginate} count={results.results.row_count} />\n </conditional.true>\n\n <div style={{ \"minHeight\": \"calc(100vh - 250px)\", \"padding\": \"20px\" }}>\n {results.results.rows.map((item, index) => {\n return <AnaylticsGroup scale={resetScale} change={change} index={index} parseSearchFilters={parseSearchFilters} searchFilters={searchFilters} grouping={grouping} headers={results.turnreport} loading={loading} includes={includes} row_count={results.results.row_count} range={range} getSet={getSet} high={getHigh()} filters={filters} setFilters={setFilters} data={item} />\n })}\n </div>\n\n <conditional.true value={(results.results.row_count > paginate.pagesize)}>\n <div className=\"bc\" style={{ \"borderTop\": \"1px solid\" }}>\n <Paginate pageSizeOptions={[20, 50, 100]} showSizeChanger={true} paginate={paginate} setPaginate={setPaginate} count={results.results.row_count} />\n </div>\n </conditional.true>\n\n\n </Layout.Content>\n </Layout>\n </>\n )\n}","import { Divider, Typography, Layout, Space, Table, Button, Form, Switch, Input, Row, Col, message, Card, DatePicker } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../../utils/Api\";\nimport { FilePdfOutlined } from '@ant-design/icons';\nimport { useForm } from \"antd/lib/form/Form\";\nimport moment from 'moment';\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\n\nexport default function BackupPage() {\n\n const [files, setFiles] = useState([]);\n const [results, setResults] = useState([]);\n const [loading, setLoading] = useState(true);\n const [range, setRange] = useState([]);\n\n const [form] = useForm();\n const verifyEmail = () => {\n apiCall(\"settings/verifyEmail\", { email: form.getFieldValue(\"email\") }, (_status, _results) => {\n if (_status) {\n message.success(\"Verification email sent.\")\n } else {\n message.error(\"Verification email failed.\")\n }\n })\n }\n\n\n const getBackups = () => {\n apiCall(\"backup/get\", {}, (_status, _results) => {\n if (_status) {\n setResults(_results);\n setFiles(_results.files);\n setLoading(false);\n }\n\n })\n }\n\n const setBackups = (_v) => {\n apiCall(\"backup/set\", _v, (_status, _results) => {\n if (_status) {\n setResults(_results);\n setFiles(_results.files);\n message.success(\"Saved successfully.\");\n } else {\n message.error(_results);\n }\n })\n }\n\n\n const data = () => {\n return files.filter(item => {\n\n if(range.length === 2){\n\n if(moment(item.date * 1000).isBetween(moment(range[0],range[1]))){\n return true;\n } else {\n return false;\n }\n\n } else {\n return true; \n }\n\n }).map((item, index) => {\n let _path = \"/download/store/backup/download?store_id=\" + window.store_id + \"&filename=\" + item.filename;\n\n \n\n return (\n\n \n\n { key: index, date: moment(item.date * 1000).format(\"MMMM Do YYYY, h:mma\"), size: item.size.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"), filename: (<a target=\"_blank\" href={_path} >{item.filename}</a>) }\n )\n });\n }\n\n useEffect(getBackups, []);\n\n\n if (loading) {\n return (<></>);\n }\n\n return (\n <>\n\n <Layout className=\"layout\" >\n\n <LayoutHeader\n title=\"Backups\"\n description=\"Use this page to download backups and configure notification options.\"\n />\n\n <div style={{ \"padding\": \"20px\", \"paddingBottom\": \"0px\" }}>\n <div style={{ \"float\": \"right\" }}>\n <Button size=\"small\" onClick={() => form.submit()} type=\"primary\" htmlType=\"submit\"><small>Save settings</small></Button>\n </div>\n <Typography.Title level={5}>Notification Options</Typography.Title>\n <Card>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Form form={form} onFinish={(_f) => setBackups(_f)}>\n <Row gutter={[30, 30]}>\n <Col md={24} xl={8}>\n <Space align=\"start\" size={15}>\n <Form.Item valuePropName='checked' initialValue={(results.email_new)} name={\"email_new\"} noStyle>\n <Switch size=\"small\" />\n </Form.Item>\n <div>\n <Typography.Title level={5}>Email new backups</Typography.Title>\n <Typography.Paragraph type=\"secondary\" level={5}>Email me each time a new backup is received</Typography.Paragraph>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={8}>\n <Space align=\"start\" size={15}>\n <Form.Item valuePropName='checked' initialValue={(results.email_warning)} name={\"email_warning\"} noStyle>\n <Switch size=\"small\" />\n </Form.Item>\n <div>\n <Typography.Title level={5}>Warning for old backups</Typography.Title>\n <Typography.Paragraph type=\"secondary\" level={5}>Email me when my last backup becomes over two days old</Typography.Paragraph>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={8}>\n <div>\n <Typography.Title level={5}>Send emails to:</Typography.Title>\n <Form.Item rules={[{ type: \"email\", message: \"Must be a valid email.\" }]} initialValue={results.email} name={\"email\"}>\n <Input type=\"email\" style={{ \"maxWidth\": \"400px\" }} suffix={<Button style={{ \"marginRight\": \"-6px\" }} size=\"small\" onClick={() => verifyEmail()} type=\"primary\"><small>Verify Email</small></Button>} enterButton=\"Verify email\" placeholder=\"name@email.com\" />\n </Form.Item>\n </div>\n </Col>\n </Row>\n </Form>\n </Card>\n </div>\n\n\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Backups</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n Below are the most recent backups that we have received from your Bookmanager system.<br />\n Clicking a filename will allow you to download a backup (e.g. for recovery purposes).\n </Typography.Paragraph>\n\n <div className=\"shim\"></div><div className=\"shim\"></div> <div className=\"shim\"></div><div className=\"shim\"></div>\n\n\n\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <Table size=\"small\" pagination={true}\n // title={() => {\n\n // return (\n // <div>\n // <Space>\n // <DatePicker.RangePicker value={range} onChange={(e) => {\n // console.log(e);\n // setRange(e);\n // }} picker=\"month\" ></DatePicker.RangePicker>\n // <Button onClick={() => setRange([])} disabled={(range.length === 0)}>Clear</Button>\n // </Space>\n // </div>\n // )\n // }}\n\n columns={[\n { key: \"blank\", width: \"10px\" },\n { title: <small>Date</small>, dataIndex: 'date', key: 'date' },\n { title: <small>Size</small>, dataIndex: 'size', key: 'size' },\n { title: <small>Backup Filename</small>, dataIndex: 'filename', key: 'filename' },\n ]}\n dataSource={data()}\n />\n </Card>\n <br />\n <Typography.Paragraph type=\"secondary\">\n <em><small>\n Although unlikely, it is possible that\n our security measures are compromised in a way that exposes your data to others. It is also\n possible that the online backup may not have usable data for recovery (due to any number\n of technical or human issues.)</small>\n </em>\n </Typography.Paragraph>\n\n <Divider dashed />\n <Row gutter={[30, 30]}>\n <Col md={24} xl={24}>\n <Space align=\"start\" size={15}>\n <FilePdfOutlined />\n <div>\n <Typography.Text level={5}>By using this service you are agreeing to our <a href=\"https://bookmanager.com/i/tbm/Backup_Terms_of_Use.pdf\" target=\"_blank\">terms & conditions and disclaimer.</a> Please read it for your safety.</Typography.Text>\n </div>\n </Space>\n </Col>\n </Row>\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n );\n}","import React from \"react\";\nimport { Layout, Typography, Divider, Space, Button, Table } from \"antd\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\n\nexport default function CalandarReportsPage() {\n\n const summary_columns = [\n { title: <small>Totals</small>, dataIndex: 'totals', key: 'totals' },\n { title: <small>sld_isbns</small>, dataIndex: 'sld_isbns', key: 'sld_isbns' },\n { title: <small>sld_units</small>, dataIndex: 'sld_units', key: 'sld_units' },\n { title: <small>sld_retail</small>, dataIndex: 'sld_retail', key: 'sld_retail' },\n { title: <small>sld_pre_xmas</small>, dataIndex: 'sld_pre_xmas', key: 'sld_pre_xmas' },\n { title: <small>sld_jan_feb</small>, dataIndex: 'sld_jan_feb', key: 'sld_jan_feb' },\n { title: <small>cart_isbns</small>, dataIndex: 'cart_isbns', key: 'cart_isbns' },\n { title: <small>oo_isbns</small>, dataIndex: 'oo_isbns', key: 'oo_isbns' },\n { title: <small>ttloo_units</small>, dataIndex: 'ttloo_units', key: 'ttloo_units' },\n {\n title: <small>ttloo_retail</small>, dataIndex: 'ttloo_retail', key: 'ttloo_retail', render: (e) => {\n return (e) ? \"$\" + e.toFixed(2) : \"\";\n }\n },\n { title: <small>avail_titles</small>, dataIndex: 'avail_titles', key: 'avail_titles' }\n ]\n\n const columns = [\n {\n title: <small>prefix</small>, dataIndex: 'prefix', key: 'prefix', render: (e) => {\n return <a>{e}</a>;\n }\n },\n { title: <small>publisher</small>, dataIndex: 'publisher', key: 'publisher' },\n { title: <small>sld_isbns</small>, dataIndex: 'sld_isbns', key: 'sld_isbns' },\n { title: <small>sld_units</small>, dataIndex: 'sld_units', key: 'sld_units' },\n { title: <small>sld_retail</small>, dataIndex: 'sld_retail', key: 'sld_retail' },\n { title: <small>sld_pre_xmas</small>, dataIndex: 'sld_pre_xmas', key: 'sld_pre_xmas' },\n { title: <small>sld_jan_feb</small>, dataIndex: 'sld_jan_feb', key: 'sld_jan_feb' },\n { title: <small>cart_isbns</small>, dataIndex: 'cart_isbns', key: 'cart_isbns' },\n { title: <small>oo_isbns</small>, dataIndex: 'oo_isbns', key: 'oo_isbns' },\n { title: <small>ttloo_units</small>, dataIndex: 'ttloo_units', key: 'ttloo_units' },\n {\n title: <small>ttloo_retail</small>, dataIndex: 'ttloo_retail', key: 'ttloo_retail', render: (e) => {\n return (e) ? \"$\" + e.toFixed(2) : \"\";\n }\n },\n { title: <small>avail_titles</small>, dataIndex: 'avail_titles', key: 'avail_titles' }\n ]\n\n\n\n const summary_data = [\n\n {\n \"totals\": \"557 rows\",\n \"sld_isbns\": \"\",\n \"sld_units\": \"\",\n \"sld_retail\": \"\",\n \"sld_pre_xmas\": \"\",\n \"sld_jan_feb\": \"\",\n \"cart_isbns\": 1,\n \"oo_isbns\": 1,\n \"ttloo_units\": 4,\n \"ttloo_retail\": 59.96,\n \"avail_titles\": 53935\n }\n ];\n\n const columns_data = [\n\n {\n \"prefix\": \"97814267\",\n \"publisher\": \"Abingdon Press\",\n \"sld_isbns\": \"\",\n \"sld_units\": \"\",\n \"sld_retail\": \"\",\n \"sld_pre_xmas\": \"\",\n \"sld_jan_feb\": \"\",\n \"cart_isbns\": \"\",\n \"oo_isbns\": \"\",\n \"ttloo_units\": \"\",\n \"ttloo_retail\": \"\",\n \"avail_titles\": 10\n },\n\n\n {\n \"prefix\": \"97815256\",\n \"publisher\": \"Wyman Publishing\",\n \"sld_isbns\": \"\",\n \"sld_units\": \"\",\n \"sld_retail\": \"\",\n \"sld_pre_xmas\": \"\",\n \"sld_jan_feb\": \"\",\n \"cart_isbns\": \"\",\n \"oo_isbns\": 1,\n \"ttloo_units\": 4,\n \"ttloo_retail\": 59.96,\n \"avail_titles\": 616\n }\n ];\n\n\n return (\n <>\n <Layout className=\"layout\">\n\n <LayoutHeader\n todo\n title=\"Calandar Reports\"\n description=\"Use this page to view calandar reports.\"\n button={<Button size=\"small\" type=\"primary\"><small> Generate PDF</small></Button>}\n />\n\n <Layout.Content style={{\"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n \n <Typography.Title level={5}>Summary:</Typography.Title>\n <Table size=\"small\" bordered pagination={false}\n columns={summary_columns}\n dataSource={summary_data}\n />\n <br />\n <Typography.Title level={5}>Activity:</Typography.Title>\n <Table expandable expandIcon={<></>} size=\"small\" bordered pagination={false}\n columns={columns}\n dataSource={columns_data}\n />\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport moment from \"moment\";\nimport { Table } from \"antd\";\n\n\nexport default function EDILog(props) {\n\n const { doc_id = 0 } = props;\n const [results, setResults] = useState({ log_list: [] })\n const [loading, setLoading] = useState(false);\n // \"action\": \"upload\",\n // \"done_by_name\": \"HarperCollins Canada\",\n // \"done_by_san\": \"115026X\",\n // \"path\": \"\\/home\\/pubstock\\/client_ftp\\/115026X\\/outbox\\/16770042X85601082022_030030.856\",\n // \"time\": \"2022-01-08 00:01:03\",\n // \"ip_addr\": \"199.201.3.18\",\n // \"error\": 0\n\n\n const columns = [\n {key : \"blank\", width : \"10px\"},\n { title: <small>Action</small>, dataIndex: 'action', key: 'action' },\n {\n title: <small>Done by</small>, dataIndex: 'done_by_name', key: 'done_by_name', render: (e, f) => {\n return (\n <>\n <div>{e}</div>\n <div>{f.done_by_san}</div>\n </>\n )\n }\n },\n { title: <small>Path</small>, dataIndex: 'path', key: 'path' },\n {\n title: <small>Time</small>, dataIndex: 'time', key: 'time', render: (e) => {\n return (e) ? moment(e).format(\"MMM DD, YYYY\") : \"\"\n }\n },\n { title: <small>IP</small>, dataIndex: 'ip_addr', key: 'ip_addr' },\n {\n title: <small>Error</small>, dataIndex: 'error', key: 'error', render: (e) => {\n return (e) ? e.toString() : \"\";\n }\n },\n ]\n\n\n\n const getLog = () => {\n setLoading(true)\n apiCall(\"edi/getLog\", { doc_id: doc_id }, (_status, _results) => {\n if (_status) {\n setResults(_results);\n setLoading(false);\n }\n })\n }\n\n useEffect(getLog, []);\n\n\n\n\n return (\n <>\n <div style={{ \"margin\": \"-20px\" }}>\n <Table\n size=\"small\"\n pagination={false}\n loading={loading}\n columns={columns}\n dataSource={results.log_list}\n />\n </div>\n </>\n );\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Form, Radio, Select, Switch, Input, Space, DatePicker, Row, Col, Pagination, Table, Button } from \"antd\";\nimport { RedoOutlined, ProfileOutlined, ShareAltOutlined, MenuOutlined, PicLeftOutlined, AppstoreOutlined, CloseOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport EDILog from \"../../components/EDILog.js\";\nimport { apiCall, apiDownload } from \"../../utils/Api\";\nimport { addKeys, bytesToSize, addCommas } from \"../../utils/Utils\";\nimport Paginate from \"../../components/Paginate.js\";\n\nexport default function EdiActivityPage() {\n\n const [results, setResults] = useState({\n total_rows: 0,\n rows: [],\n filters: {\n contacts: [], // {name : \"\", san : \"\", id : \"\"}\n file_types: []\n },\n edi_users: [] // {name : \"\", san : \"\", id : \"\"}\n })\n\n const initFilters = {\n show_which: \"all\",\n start_date: moment().startOf(\"day\").subtract(7, \"day\").unix(),\n end_date: moment().startOf(\"day\").add(1, \"day\").unix(),\n offset: 0,\n limit: 20,\n filename: \"\",\n trading_with: 0,\n trading_as: 0,\n file_type: \"\",\n hide_env: false,\n display_details: true,\n };\n\n const [filters, setFilters] = useState(initFilters);\n const [current, setCurrent] = useState(1);\n const [pageSize, setPageSize] = useState(10);\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState([]);\n\n const downloadFile = (_doc_id) => {\n let obj = {\n doc_id: _doc_id\n }\n apiDownload(obj, \"edi/download\");\n }\n\n const getActivity = () => {\n setLoading(true);\n apiCall(\"edi/getActivity\", filters, (_status, _results) => {\n if (_status) {\n addKeys(_results.rows);\n setResults(_results);\n setLoading(false);\n }\n })\n }\n\n useEffect(getActivity, [filters]);\n\n const pageChange = (_page, _limit) => {\n setPageSize(_limit);\n setCurrent(_page);\n let _offset = (_page - 1) * _limit;\n setFilters({ ...filters, \"offset\": _offset, \"limit\": _limit });\n }\n\n const drawShowing = () => {\n let end = current * pageSize;\n let start = (current * pageSize) - (pageSize - 1);\n if (end > results.total_rows) {\n end = results.total_rows;\n }\n if (results.total_rows === 0) {\n return \"0 of \";\n }\n return addCommas(start) + \" to \" + addCommas(end);\n }\n\n const drawChildTable = (_record) => {\n return (\n <>\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 20px\" }}>\n <EDILog doc_id={_record.doc_id} />\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n </>\n )\n }\n\n const expandCell = (_data, _type) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n const setTrading = (_san) => {\n let obj = results.edi_users.find(item => item.san === _san);\n if (obj) {\n // change edi user\n setFilters({ ...filters, \"trading_as\": obj.id });\n } else {\n obj = results.filters.contacts.find(item => item.san === _san);\n if (obj) {\n // change trading with\n setFilters({ ...filters, \"trading_with\": obj.id });\n } else {\n // gracefully fail\n }\n }\n }\n\n const columns = [\n\n { key: \"blank\", width: \"10px\" },\n {\n title: <small>To</small>, dataIndex: 'to_name', key: 'to_name', render: (e, f) => {\n return (\n <>\n <div>{e}</div>\n <a onClick={() => setTrading(f.to_san)}>{f.to_san}</a>\n </>\n )\n }\n },\n {\n title: <small>From</small>, dataIndex: 'from_name', key: 'from_name', render: (e, f) => {\n return (\n <>\n <div>{e}</div>\n <a onClick={() => setTrading(f.from_san)} >{f.from_san}</a>\n </>\n )\n }\n },\n\n {\n title: <small>Type</small>, dataIndex: 'doctype', key: 'doctype', render: (e, f) => {\n return (<nobr>{f.format} {e}</nobr>)\n }\n },\n {\n title: <small>Sent</small>, dataIndex: 'sent', key: 'sent', render: (e) => {\n return (e) ? <nobr>{moment(e).format(\"MMM DD, YYYY\")}</nobr> : \"\"\n }\n },\n {\n title: <small>Received</small>, dataIndex: 'received', key: 'received', render: (e) => {\n return (e) ? <nobr>{moment(e).format(\"MMM DD, YYYY\")}</nobr> : \"\"\n }\n },\n {\n title: <small>Bytes</small>, dataIndex: 'size', key: 'size', render: (e) => {\n return bytesToSize(e);\n }\n },\n {\n title: <small>Filename</small>, dataIndex: 'filename', key: 'filename', render: (e, f) => {\n return (filters.display_details) ? <a onClick={() => downloadFile(f.doc_id)}>{e}</a> : <>{e} files</>\n }\n },\n { title: <small>ISA</small>, dataIndex: 'isa', key: 'isa' },\n {\n title: <small>{(filters.display_details && \"Log\")}</small>, dataIndex: 'doc_id', key: 'doc_id', render: (e, f) => {\n return (filters.display_details) ? <a onClick={() => expandCell(f)}>[Log]</a> : \"\";\n }\n },\n { title: \"\", dataIndex: 'space', key: 'space' },\n ]\n\n const drawFilters = () => {\n\n return (\n <div style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"20px 20px 0px 20px\" }}>\n <Form size=\"small\" layout=\"vertical\">\n\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>EDI Activity</div>\n </Typography.Title>\n\n <Divider dashed style={{ \"marginTop\": \"10px\", \"marginBottom\": \"15px\" }} />\n <Space wrap size={[10, 0]}>\n <Form.Item label={<small>Date range</small>} >\n <DatePicker.RangePicker defaultValue={[moment(filters.start_date * 1000), moment(filters.end_date * 1000)]} style={{ \"width\": \"250px\" }} onChange={(e) => setFilters({ ...filters, \"start_date\": e[0].startOf('day').unix(), \"end_date\": e[1].endOf('day').unix() })} format=\"MMM DD, YYYY\" />\n </Form.Item>\n <Form.Item label={<small>Display</small>}>\n <Radio.Group value={filters.display_details} onChange={(e) => setFilters({ ...filters, \"display_details\": e.target.value })} buttonStyle=\"solid\">\n <Radio.Button value={true}><small>Detail</small></Radio.Button>\n <Radio.Button value={false}><small>Summary</small></Radio.Button>\n </Radio.Group>\n </Form.Item>\n <Form.Item label={<small>Status</small>} >\n <Select value={filters.show_which} onChange={(e) => setFilters({ ...filters, \"show_which\": e })} style={{ width: 90 }}>\n <Select.Option value=\"all\"><small>Any</small></Select.Option>\n <Select.Option value=\"waiting\"><small>Waiting</small></Select.Option>\n <Select.Option value=\"sent\" ><small>Sent</small></Select.Option>\n <Select.Option value=\"incoming\" ><small>Incoming</small></Select.Option>\n </Select>\n </Form.Item>\n <Form.Item label={<small>File type</small>}>\n <Select value={filters.file_type} onChange={(e) => setFilters({ ...filters, \"file_type\": e })} style={{ width: 90 }}>\n <Select.Option key=\"any\" value=\"\"><small>Any</small></Select.Option>\n {results.filters.file_types.map((item, index) => {\n return (<Select.Option key={index} value={item}><small>{item}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Form.Item label={<small>Filename Search</small>}>\n <Input.Search onSearch={(e) => setFilters({ ...filters, \"filename\": e })} allowClear enterButton placeholder=\"Search filename...\" style={{ \"width\": \"260px\", \"fontSize\": \"12px\" }} />\n </Form.Item>\n\n <Form.Item label={<small>EDI User (Name)</small>}>\n <Select value={filters.trading_as} onChange={(e) => setFilters({ ...filters, \"trading_as\": e })} style={{ width: 150 }}>\n <Select.Option key=\"all\" value={0}><small>All</small></Select.Option>\n {results.edi_users.map((item, index) => {\n return (<Select.Option key={index} value={item.id}><small>{item.name}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n\n <Form.Item label={<small>Hide 997s / Inv Reqs</small>}>\n <Switch checked={filters.hide_env} onChange={(e) => setFilters({ ...filters, \"hide_env\": e })} size=\"small\" />\n </Form.Item>\n\n <Form.Item label={<small>Trading with (Name): </small>}>\n <Select value={filters.trading_with} onChange={(e) => setFilters({ ...filters, \"trading_with\": e })} style={{ width: 150 }}>\n <Select.Option key=\"any\" value={0}><small>Any</small></Select.Option>\n {results.filters.contacts.map((item, index) => {\n return (<Select.Option key={index} value={item.id}><small>{item.name}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Divider plain orientation=\"vertical\"><small>or</small></Divider>\n <Form.Item label={<small>EDI User (SAN)</small>}>\n <Select value={filters.trading_as} onChange={(e) => setFilters({ ...filters, \"trading_as\": e })} style={{ width: 110 }}>\n <Select.Option key=\"all\" value={0}><small>All</small></Select.Option>\n {results.edi_users.map((item, index) => {\n return (<Select.Option key={index} value={item.id}><small>{item.san}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Form.Item label={<small>Trading with (SAN): </small>} >\n <Select value={filters.trading_with} onChange={(e) => setFilters({ ...filters, \"trading_with\": e })} style={{ width: 110 }}>\n <Select.Option key=\"any\" value={0}><small>Any</small></Select.Option>\n {results.filters.contacts.map((item, index) => {\n return (<Select.Option key={index} value={item.id}><small>{item.san}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n </Space>\n </Form>\n </div>\n )\n\n }\n\n\n\n const setPaginate = (_obj) => {\n setCurrent(_obj.current);\n setFilters({ ...filters, \"offset\": _obj.start, \"limit\": _obj.limit });\n }\n\n return (\n <>\n <Layout className=\"layout\">\n {/* <Layout.Sider theme=\"light\" >\n <div style={{ \"margin\": \"17px 13px\" }}>\n <Typography.Title style={{ \"textAlign\": \"center\", \"fontSize\": \"15px\" }} level={5}>\n Actions\n </Typography.Title>\n <Space size={5} style={{ \"width\": \"100%\" }} direction=\"vertical\">\n <div onClick={() => setFilters(initFilters)} style={{ \"backgroundColor\": \"#0842a0\", \"color\": \"#fff\", \"textAlign\": \"center\", \"fontWeight\": \"500\", \"cursor\": \"pointer\" }}><small>Reset</small></div>\n </Space>\n <Divider style={{ \"margin\": \"8px 0px\" }} dashed />\n <div onClick={() => getActivity()} style={{ \"backgroundColor\": \"#78c042\", \"color\": \"#fff\", \"textAlign\": \"center\", \"fontWeight\": \"500\", \"cursor\": \"pointer\" }}><small>Refresh <RedoOutlined /></small></div>\n <Divider style={{ \"margin\": \"8px 0px\" }} />\n </div>\n </Layout.Sider> */}\n\n\n\n <Layout.Content className=\"layoutHeader\" style={{ \"padding\": \"0px\", \"borderBottom\": \"0px\" }} >\n <div style={{ \"padding\": \"0px 0px\" }}>\n {drawFilters()}\n </div></Layout.Content>\n <Divider style={{ \"margin\": \"0px\" }} />\n <Layout.Content className=\"layoutHeader\" style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"0px 0px\" }}>\n <Paginate setPaginate={(e) => setPaginate({ current: e.current, start: e.offset, limit: e.pagesize })} count={results.total_rows} paginate={{ current: current, pagesize: filters.limit, offset: filters.start }} />\n\n <div style={{ \"margin\": \"0 0px\" }}>\n <Table\n size=\"small\"\n pagination={false}\n loading={loading}\n columns={columns}\n dataSource={results.rows}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n </div>\n <Paginate setPaginate={(e) => setPaginate({ current: e.current, start: e.offset, limit: e.pagesize })} count={results.total_rows} paginate={{ current: current, pagesize: filters.limit, offset: filters.start }} />\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React from \"react\";\nimport { Layout, Typography, Divider } from \"antd\";\n\nexport default function LibraryInvestmentProjectPage() {\n\n return (\n <>\n <Layout style={{ \"backgroundColor\": \"#fff\" }}>\n <Layout.Content style={{ \"borderLeft\": \"1px solid #eee\", \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={4}>Library Investment Project</Typography.Title>\n <Divider />\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Layout, Typography, Row, Col, Select, Form, Switch, Divider, Table, Popconfirm, Button, Popover, Tag, Pagination, Spin, message, Skeleton, Modal, Upload, Space, Alert } from \"antd\";\nimport { CommentOutlined, ImportOutlined, UploadOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../tools/conditional\";\nimport CommentOptions from \"./CommentOptions\";\nimport { OmitProps } from \"antd/lib/transfer/ListBody\";\nexport default function ImportComments(props) {\n\n\n\n const {isbn = false, comment_id = false} = props; \n\n const { callback = () => { } } = props;\n\n const [modalVisible, setModalVisible] = useState(false);\n const [uploading, setUploading] = useState(false);\n const [isbnCol, setIsbnCol] = useState(\"\");\n const [commentCol, setCommentCol] = useState(\"\");\n const [data, setData] = useState({ headers: [], rows: [] })\n const [dataLoaded, setDataLoaded] = useState(false);\n const [editOptions, setEditOptions] = useState({})\n const [complete, setComplete] = useState(false);\n const [completeRows, setCompleteRows] = useState([])\n\n const close = () => {\n setData({ headers: [], rows: [] });\n setIsbnCol(\"\");\n setCompleteRows([]);\n setComplete(false);\n setCommentCol(\"\");\n setDataLoaded(false);\n setModalVisible(false);\n }\n\n\n // Possible to have empty \n\n const uploadFile = (_file) => {\n setUploading(true);\n apiCall(\"comment/importFile\", { file: _file.file }, (_status, _result) => {\n if (_status) {\n setData(_result);\n setUploading(false);\n setDataLoaded(true);\n }\n });\n }\n\n\n const importComments = (_f) => {\n\n let fields = {};\n fields.remove_previous = _f.remove_previous;\n\n // grab the isbn/comment from the selected fields\n fields.values = data.rows.map((item, index) => {\n return { isbn: item[isbnCol], comment: item[commentCol] }\n });\n // encode\n fields.values = JSON.stringify(fields.values);\n\n if (editOptions.hasOwnProperty(\"current_shared_with\")) { fields.shared_with = editOptions.current_shared_with }\n if (editOptions.hasOwnProperty(\"visible_anywhere\")) { fields.visible_anywhere = editOptions.visible_anywhere }\n if (editOptions.hasOwnProperty(\"expiry_type\")) { fields.expiry_type = editOptions.expiry_type }\n if (editOptions.hasOwnProperty(\"expiry_date\") && (editOptions.expiry_date)) { fields.expiry_days = editOptions.expiry_date }\n if (editOptions.hasOwnProperty(\"current_author\")) { fields.as_author = editOptions.current_author }\n if (editOptions.hasOwnProperty(\"titlelist_id\") && (editOptions.titlelist_id)) { fields.titlelist_id = editOptions.titlelist_id }\n\n\n apiCall(\"comment/importComments\", fields, (_status, _results) => {\n if (_status) {\n callback();\n setComplete(true)\n setCompleteRows(_results);\n }\n })\n\n\n\n }\n\n\n const drawComplete = () => {\n\n let cols = [\n { title: <small>ISBN</small>, dataIndex: \"isbn\", key: \"isbn\" },\n { title: <small>Comment</small>, dataIndex: \"comment\", key: \"comment\" },\n { title: <small>Status</small>, dataIndex: \"status\", key: \"status\", render : (e) =>{\n return (e) ? <span style={{\"color\" : \"#228b22\"}}>Passed</span> : <span style={{\"color\" : \"#ff4d4f\"}}>Failed</span>\n } }\n ]\n\n let msg = completeRows.filter(item => item.status).length.toString() + \" comment(s) in \" + completeRows.length.toString() + \" row(s) added.\"\n\n return (\n <>\n <div style={{\"width\" : \"500px\"}}>\n <Alert message={msg} type=\"success\" />\n <br />\n <Table\n scroll={{ y: 300 }} size=\"small\" pagination={false}\n columns={cols}\n dataSource={completeRows}\n className={\"tableBorder\"}\n />\n\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button type=\"primary\" onClick={() => close(false)}>Close</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n\n </>\n )\n }\n\n\n\n const getHeaders = () => {\n\n let ret = [];\n\n if (isbnCol) {\n ret.push({ title: <small>ISBN <small style={{ \"fontWeight\": \"normal\" }}>({isbnCol})</small></small>, dataIndex: isbnCol, key: isbnCol })\n }\n\n if (commentCol) {\n ret.push({ title: <small>Comment <small style={{ \"fontWeight\": \"normal\" }}>({commentCol})</small></small>, dataIndex: commentCol, key: commentCol })\n }\n\n return ret;\n\n }\n\n const drawResults = () => {\n return (<>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <span>Import preview <small>({data.rows.length} rows)</small></span>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Table\n style={{\"maxWidth\" : \"450px\"}}\n scroll={{ y: 300 }} size=\"small\" pagination={false}\n columns={getHeaders(data.headers)}\n dataSource={data.rows}\n className={\"tableBorder\"}\n />\n </>\n )\n }\n\n const drawSelection = () => {\n\n return (\n <>\n\n <Space size=\"large\">\n <Form.Item label=\"ISBN\">\n <Select placeholder=\"Select ISBN Column\" value={(isbnCol) ? isbnCol : undefined} onChange={(e) => setIsbnCol(e)} style={{ \"width\": \"200px\" }}>\n {data.headers.filter(item => item !== commentCol).map((item, index) => {\n return (<Select.Option key={index} value={item}>{item}</Select.Option>)\n })}\n </Select>\n </Form.Item>\n <Form.Item label=\"Comment\">\n <Select placeholder=\"Select Comment Column\" value={(commentCol) ? commentCol : undefined} onChange={(e) => setCommentCol(e)} style={{ \"width\": \"200px\" }}>\n {data.headers.filter(item => item !== isbnCol).map((item, index) => {\n return (<Select.Option key={index} value={item}>{item}</Select.Option>)\n })}\n </Select>\n </Form.Item>\n </Space>\n <br />\n <span>Remove previous comments (if any)</span>\n <br />\n <Form.Item initialValue={false} name=\"remove_previous\" noStyle>\n <Switch size=\"small\" />\n </Form.Item>\n\n </>\n )\n }\n\n const drawUpload = () => {\n\n return (\n <Upload.Dragger accept=\".txt, .xls, .xlsx, .tsv, .doc, .docx\" showUploadList={false} customRequest={(e) => uploadFile(e)} style={{ \"padding\": \"0px 20px\" }}>\n <div >\n {(uploading) ? <Spin style={{ height: \"35px\" }} /> : <UploadOutlined style={{ \"fontSize\": \"30px\", height: \"35px\" }} />}\n </div>\n <p className=\"ant-upload-text\">Click or drag to upload</p>\n <p className=\"ant-upload-hint\">\n Upload an Excel file (.xls or .xlsx) or tab delimited file to add or update comments for multiple titles at once. You will then be prompted to choose which columns map to ISBN and Comments.\n </p>\n </Upload.Dragger>\n\n )\n }\n\n return (\n <>\n\n <Modal\n visible={modalVisible}\n footer={false}\n width={\"auto\"}\n style={{ \"maxWidth\": \"750px\" }}\n centered\n title=\"Import comments\"\n onCancel={() => close()}\n >\n\n\n <conditional.true value={(complete)}>\n {drawComplete()}\n </conditional.true>\n\n <conditional.true value={(!complete)}>\n\n\n <Form onFinish={(f) => importComments(f)} layout=\"vertical\" >\n\n <conditional.true value={(!dataLoaded)}>\n {drawUpload()}\n </conditional.true>\n <conditional.true value={(dataLoaded)}>\n <Row gutter={25}>\n <Col flex=\"400px\" >\n {drawSelection()}\n <br />\n {drawResults()}\n <br />\n </Col>\n <Col flex=\"auto\" >\n <div style={{ \"width\": \"250px\" }}>\n <CommentOptions isbn={isbn} comment_id={comment_id} editOptions={editOptions} setEditOptions={setEditOptions} />\n </div>\n </Col>\n </Row>\n </conditional.true>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close(false)}>Cancel</Button>\n <Button disabled={(!isbnCol || !commentCol)} htmlType=\"submit\" type=\"primary\">Import</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n\n </Form>\n </conditional.true>\n </Modal>\n\n\n <div onClick={() => setModalVisible(true)} type=\"primary\">{props.children}</div>\n </>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Layout, Typography, Divider, Table, Popconfirm, Button, Popover, Tag, Pagination, Card, message, Skeleton } from \"antd\";\nimport { CommentOutlined, DeleteOutlined, ImportOutlined, CloseOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport Comment from \"../../components/Comment\";\nimport { apiCall } from \"../../utils/Api\";\nimport { parceAuthors } from \"../../utils/Utils\";\nimport conditional from \"../../tools/conditional\";\nimport Title from \"../../components/title/Title\";\nimport ImportComments from \"../../components/ImportComments\";\nimport { adjustColor } from \"../../utils/Utils\";\nimport Html from \"../../utils/Html\";\nimport Paginate from \"../../components/Paginate\";\nimport Renderer from \"../../components/Renderer\";\nimport ItemLayouts from \"../../components/ItemLayouts\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nexport default function ManageTitleComments() {\n\n const [results, setResults] = useState({ rows: [], total: 0 });\n const [expanded, setExpanded] = useState([]);\n const [loading, setLoading] = useState(true);\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 20, offset: 0 });\n\n\n const getComments = () => {\n\n setLoading(true);\n apiCall(\"comment/getAll\", { limit: paginate.pagesize, offset: paginate.offset }, (_status, _result) => {\n if (_status) {\n _result.rows = addKeys(_result.rows);\n setResults(_result);\n setLoading(false);\n }\n })\n }\n\n useEffect(getComments, [paginate]);\n\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const colors = {\n \"personal\": \"#d1b3e5\",\n \"webstore\": \"#f47ddc\",\n \"clients\": \"#fa9050\",\n \"booksellers\": \"#90EE90\",\n \"staff\": \"#ffef00\",\n \"visitors\": \"#70e2ff\",\n \"everyone\": \"#def1f6\",\n \"unknown\": \"#bad4e1\",\n }\n\n\n const drawIcon = (e) => {\n\n return (\n <>\n <Comment callback={getComments} data={e} isbn={e.isbn}>\n <Popover overlayStyle={{ \"maxWidth\": \"500px\" }} placement=\"right\" title={\n <small>\n <div style={{ \"float\": \"right\" }}>\n      \n <Tag style={{ \"lineHeight\": \"15px\", \"marginTop\": \"2px\", \"marginRight\": \"-8px\" }} color={adjustColor(colors[e.shared_with], -20)}>\n <small>{e.shared_with}</small>\n </Tag>\n </div>{e.author}\n </small>} content={<><Html html={e.text} />\n <div className=\"shim\"></div>\n <small>{moment(e.date * 1000).format(\"MMMM Do, YYYY\")}</small>\n </>} trigger=\"hover\">\n <Button style={{ \"background\": adjustColor(colors[e.shared_with], -20), border: adjustColor(colors[e.shared_with], -60) }} icon={<CommentOutlined />} type=\"primary\" size=\"small\"></Button>\n </Popover>\n </Comment>\n </>\n );\n }\n\n\n const columns = [\n {\n title: <small></small>, className: \"cellBorder\", dataIndex: 'comment_action', width: \"40px\", key: 'comment_action', render: (e, f) => {\n return drawIcon(f);\n }\n },\n {\n title: <small>Posted by</small>, dataIndex: 'author', key: 'author', render: (e) => {\n return <div style={{ \"maxWidth\": \"120px\" }} className=\"ellipsis\">{e}</div>\n }\n },\n {\n title: <small>List</small>, dataIndex: 'list_name', key: 'list_name', render: (e) => {\n return <div style={{ \"maxWidth\": \"100px\" }} className=\"ellipsis\">{e}</div>\n }\n },\n {\n title: <small style={{ \"minWidth\": \"100px\" }}>Modified</small>, dataIndex: 'modified', key: 'modified', render: (e) => {\n\n\n return (e) ? moment(e * 1000).format(\"MMM D, YYYY\") : \"\";\n }\n },\n {\n title: <small>Expiry</small>, dataIndex: 'expiry', key: 'expiry', width: \"73px\", render: (e, f) => {\n if (e) {\n return <div style={{ \"maxWidth\": \"100px\" }} className=\"ellipsis\">{moment(e * 1000).format(\"MMM D, YYYY\")}</div>\n } else {\n return (f.list_name) ? \"List\" : \"Never\";\n }\n\n }\n },\n {\n title: <small>Title</small>, dataIndex: 'title', key: 'title', render: (e, f) => {\n return <a onClick={() => expandCell(f)}>{f.title_info.title}</a>\n }\n },\n // { title: <small>Author</small>, dataIndex: 'author', key: 'author', ellipsis: true, render: (e, f) => {\n // return <a>{parceAuthors(f.title_info.authors)}</a>;\n // } },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e, f) => {\n return (f.title_info.price) ? \"$\" + f.title_info.price : \"\";\n }\n },\n {\n title: <small>Bind</small>, dataIndex: 'binding', key: 'binding', render: (e, f) => {\n return (f.title_info.binding) ? f.title_info.binding : \"\";\n }\n },\n {\n title: <small>Pubdate</small>, dataIndex: 'pubdate', key: 'pubdate', render: (e, f) => {\n return <div style={{ \"maxWidth\": \"120px\" }} className=\"ellipsis\">{moment(f.title_info.release_date * 1000).format(\"MMM D, YYYY\")}</div>\n }\n },\n {\n title: <small>Publisher</small>, className: \"cellBorder\", dataIndex: 'publisher', key: 'publisher', render: (e, f) => {\n return <div style={{ \"maxWidth\": \"140px\" }} className=\"ellipsis\">{f.title_info.publisher}</div>\n }\n },\n /* tobias (15jun2023): removing as it is same behaviour as header import button - see web/issues#1910\n {\n title: <small>Import</small>, dataIndex: 'import', className: \"cellBorder\", width: \"40px\", key: 'import', render: (e, f) => {\n return drawImport(f);\n }\n },\n */\n {\n title: <small></small>, dataIndex: 'actions', width: \"40px\", key: 'actions', render: (e, f) => {\n return drawRemove(f.id);\n }\n }\n ]\n\n\n const deleteComment = (_id) => {\n\n apiCall(\"comment/delete\", { comment_id: _id }, (_status, _results) => {\n if (_status) {\n message.success(\"Comment removed successfully.\")\n getComments();\n }\n })\n }\n\n const drawImport = (_obj) => {\n\n return (\n <ImportComments comment_id={_obj.id} isbn={_obj.isbn} callback={getComments} >\n <Button type=\"link\" size=\"small\"><ImportOutlined /></Button>\n </ImportComments>\n\n )\n\n }\n\n const drawRemove = (_id) => {\n\n return (\n <Popconfirm\n title=\"Are you sure?\"\n onConfirm={() => deleteComment(_id)}\n okText=\"Remove\"\n okType=\"danger\"\n cancelText=\"Cancel\"\n >\n <Button danger type=\"link\" size=\"small\"><DeleteOutlined /></Button>\n </Popconfirm>\n )\n\n }\n\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n const drawChildTable = (_record) => {\n\n return (\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"20px 20px\" }}>\n <Renderer close={false}><ItemLayouts isbn={_record.isbn} display=\"details2\" /></Renderer>\n </div>\n </div>\n )\n }\n\n\n\n return (\n <>\n\n <Layout className=\"layout\" >\n\n <LayoutHeader\n title=\"Manage Comments\"\n description=\"Use this page to import and manage comments.\"\n button={<>\n <ImportComments callback={getComments} >\n <Button size=\"small\" type=\"primary\"><small><ImportOutlined /> Import</small></Button>\n </ImportComments>\n </>}\n />\n\n <Layout.Content style={{\"padding\": \"0px\" }} >\n\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.total} />\n <Table loading={loading} size=\"small\" pagination={false}\n columns={columns}\n dataSource={results.rows}\n expandable\n expandedRowKeys={expanded}\n expandIconColumnIndex={-1}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.total} />\n\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Space, DatePicker, Menu, Dropdown, Tabs, Col, Statistic, Card } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport Html from \"../../utils/Html\";\nimport { Link } from \"react-router-dom\";\nimport moment from \"moment\";\nimport { motion } from \"framer-motion\"\nimport { CloseOutlined } from '@ant-design/icons';\nimport Peek from \"../../components/Peek\";\nimport TitleDetails from \"../title/TitleDetails\";\nimport Renderer from \"../Renderer\";\nimport ItemLayouts from \"../ItemLayouts\";\nimport Paginate from \"../Paginate\";\nimport { addKeys, addCommas } from \"../../utils/Utils\";\nexport default function TitlesTable(props) {\n\n\n const { filters, border = true, record = {} } = props;\n\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState([]);\n const [results, setResults] = useState({ rows: [], row_count: 0 });\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 20, offset: 0 });\n\n\n // Fetch Data if not set\n // Fetch Data if not set\n const getSummary = () => {\n setLoading(true);\n\n let _filters = { ...filters }\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n\n apiCall(\"orders/getTitle\", _filters, (_status, _results) => {\n if (_status) {\n addKeys(_results.rows);\n setResults(_results);\n setLoading(false);\n }\n })\n }\n useEffect(getSummary, [paginate.current]);\n\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n\n const drawChildTable = (_record, _another) => {\n\n\n return (\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"20px 20px\" }}>\n <Renderer close={false}><ItemLayouts isbn={_record.isbn} display=\"details2\" /></Renderer>\n </div>\n </div>\n )\n\n }\n\n\n const title_columns = [\n { key : \"blank\", width : \"10px\"},\n\n {\n title: <small></small>, dataIndex: 'image', width: \"60px\", key: 'image', render: (e, f) => {\n return (<Link to=\"/test\"><img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"60px\", \"maxWidth\": \"40px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + f.eisbn} /></Link>);\n }\n },\n {\n title: <small>Title</small>, dataIndex: 'title', key: 'title', render: (e, f) => {\n return <>{f.quantity} x <a onClick={() => expandCell(f)}>{e}</a></>;\n }\n },\n { title: <small>Author</small>, dataIndex: 'author', key: 'author' },\n { title: <small>Customer</small>, dataIndex: 'name', key: 'name' },\n // { title: <small>action</small>, dataIndex: 'action', key: 'action' },\n // { title: <small>Date Ordered</small>, dataIndex: 'date_ordered', key: 'date_ordered', render: (e) => {\n // return moment(e * 1000).format(\"MMM Do YYYY - h:mma\");\n // }},\n {\n title: <small>Status</small>, dataIndex: 'stock_status', key: 'stock_status', render: (e) => {\n\n if(!e){\n return \"\";\n }\n return (<Html html={\"<div class='shim'></div><div class='shim'></div><div class='stock'>\" + e + \"</div>\"} />)\n }\n },\n // { title: <small>quantity</small>, dataIndex: 'quantity', key: 'quantity' },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e) => {\n return (e) ? \"$\" + addCommas(e) : \"\";\n },\n },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn' },\n // { title: <small>bookorder_id</small>, dataIndex: 'bookorder_id', key: 'bookorder_id' },\n // { title: <small>customer_purchase_order</small>, dataIndex: 'customer_purchase_order', key: 'customer_purchase_order' },\n // { title: <small>ignore_status</small>, dataIndex: 'ignore_status', key: 'ignore_status' }\n\n ]\n\n\n\n\n return (\n <>\n \n <Paginate hide_single={true} paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n <Table\n size=\"small\"\n columns={title_columns}\n loading={loading}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n expandIconColumnIndex={-1}\n expandedRowKeys={expanded}\n onExpand={(e) => { return false; }}\n expandIcon={() => { return (<></>) }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n <Paginate hide_single={true} paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n </>\n );\n}","import React, {useState} from \"react\";\nimport { Input, Popover, Button, Modal, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport { FormOutlined} from '@ant-design/icons';\nexport default function Notes(props) {\n\n const [note, setNote] = useState(props.note);\n // const [visible, setVisible] = useState(false);\n const [visible, setVisible] = useState(false)\n const {bookorder_id} = props; \n \n const saveNote = () =>{\n setVisible(false)\n apiCall(\"orders/setNote\", { bookorder_id : bookorder_id, note : note }, (_status, _result) =>{\n if(_status){\n setNote(_result.note);\n message.success(\"Note Saved\"); \n }\n })\n }\n\n\n const drawEditor = () => {\n return (\n <>\n <Input.TextArea \n onChange={(e) => setNote(e.target.value)} \n maxLength={50} \n showCount \n defaultValue={note}></Input.TextArea>\n <div className=\"shim\" />\n <Button \n onClick={() => saveNote()} \n type=\"primary\" \n size=\"small\">\n <small>Save</small>\n </Button>\n </>\n )\n }\n\n return (\n <>\n <Popover \n destroyTooltipOnHide \n onVisibleChange={(e) => setVisible(e)} \n visible={visible} \n content={drawEditor()} \n title={<small>Notes</small>} \n trigger=\"click\">\n <div onClick={() => setVisible(!visible)} style={{\"width\" : \"100%\", \"display\" : \"block\", \"cursor\" : \"pointer\", \"overflow\" : \"hidden\"}}>\n <conditional.true value={(note)}>\n {note}\n </conditional.true>\n\n <conditional.true value={(!note)}>\n <div style={{\"color\" : \"#aaa\"}}>  <FormOutlined /></div>\n </conditional.true>\n </div>\n </Popover>\n </>\n )\n}","import React, {useState} from \"react\";\nimport { Button, message, Popconfirm } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function ResendOrder(props) {\n\n const {bookorder_id} = props; \n const [sent, setSent] = useState(false)\n const resendOrder = () =>{\n apiCall(\"orders/resend\", {bookorder_id : bookorder_id}, (_status, _result) =>{\n if(_status){\n message.success(\"Order resent successfully.\")\n setSent(true);\n } else {\n message.error(\"There was an error.\")\n }\n });\n }\n\n return (\n <Popconfirm placement=\"left\" title=\"Resend Order?\" onConfirm={() => resendOrder()} okText=\"Yes\" cancelText=\"No\">\n <Button type=\"primary\" size=\"small\"><small>{(!sent) ? \"Resend\" : \"Resent!\"}</small></Button>\n </Popconfirm>\n )\n}","import React, { useState } from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Tag, Badge, Popconfirm, DatePicker, Menu, Dropdown, Tabs, Col, Statistic, Card, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\nimport { CloseSquareFilled } from '@ant-design/icons';\n\nexport default function OrderStatus(props) {\n\n const { bookorder_id, show_x = false } = props;\n const [ignoreStatus, setIgnoreStatus] = useState(props.ignore_status);\n\n let status = \"\"\n let question = \"\"\n let color = \"\"\n\n switch (ignoreStatus) {\n\n case \"none\":\n status = \"success\";\n color = \"#52c41a\";\n question = \"Request ignore?\";\n break;\n\n case \"store\":\n status = \"warning\";\n color = \"#faad14\";\n question = \"Cancel ignore request?\";\n break;\n\n case \"tbm\":\n status = \"default\";\n color = \"#888\";\n break;\n\n }\n const changeStatus = () => {\n apiCall(\"orders/ignoreOrder\", { bookorder_id: bookorder_id, ignore: (ignoreStatus === \"none\") ? true : false }, (_status, _results) => {\n if (_status) {\n message.success(\"Request sent.\")\n if (ignoreStatus === \"none\") {\n setIgnoreStatus(\"store\");\n } else {\n setIgnoreStatus(\"none\");\n }\n }\n })\n }\n\n\n if (ignoreStatus === \"tbm\") {\n return (<Badge style={{ \"paddingLeft\": \"7px\" }} status={status} />);\n }\n\n return (\n <>\n <Popconfirm placement=\"right\" title={question} onConfirm={() => changeStatus()} okText=\"Send\" cancelText=\"Close\">\n <div style={{ \"display\": \"block\", \"cursor\": \"pointer\", \"textAlign\" : \"center\" }}>\n <conditional.true value={(show_x)}>\n <CloseSquareFilled style={{\"color\" : color, \"fontSize\" : \"20px\"}} />\n </conditional.true>\n <conditional.true value={(!show_x)}>\n <Badge style={{ \"paddingLeft\": \"7px\" }} status={status} />\n </conditional.true>\n\n </div>\n </Popconfirm>\n </>\n );\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Space, Badge, Popconfirm, DatePicker, Menu, Dropdown, Tabs, Col, Statistic, Card } from \"antd\";\nimport { apiCall, apiDownload } from \"../../utils/Api\";\nimport Html from \"../../utils/Html\";\nimport { Link, useParams } from \"react-router-dom\";\nimport PreviousOrder from \"../../components/PreviousOrder\";\nimport moment from \"moment\";\nimport { FileExcelOutlined, CloseOutlined } from '@ant-design/icons';\nimport Peek from \"../../components/Peek\";\nimport Overlay from \"../Overlay\"; \nimport TitlesTable from \"./TitlesTable\";\nimport Notes from \"./Notes\";\nimport { pluralize, addCommas } from \"../../utils/Utils\";\nimport ResendOrder from \"./ResendOrder\";\nimport OrderStatus from \"./OrderStatus\";\nimport Paginate from \"../Paginate\";\nexport default function OrdersTable(props) {\n\n const { filters, setFilters = () => {}, border = true} = props;\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState([]);\n const [results, setResults] = useState({rows : [], row_count : 0});\n const [paginate, setPaginate] = useState({current : 1, pagesize : 20, offset : 0});\n\n\n \n useEffect(() => {\n setPaginate({current : 1, pagesize : 20, offset : 0});\n }, [filters])\n\n const expandCell = (_data) => {\n if (!expanded.includes(_data.key)) {\n setExpanded([_data.key]);\n } else {\n setExpanded([]);\n }\n }\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n\n const drawChildTable = (_record, _another) => {\n\n let title_fltrs = { ...filters }\n title_fltrs[\"bookorder_id\"] = _record.bookorder_id;\n title_fltrs[\"nesting\"] = \"bookorder_id\";\n\n return(\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 0px\" }}>\n <TitlesTable border={false} pagination={false} record={_record} data={results} filters={title_fltrs} />\n\n </div>\n </div>\n )\n }\n\n\n const getSummary = () => {\n setLoading(true)\n\n let _filters = {...filters}\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset; \n\n apiCall(\"orders/getBookorder\", _filters, (_status, _result) => {\n if (_status) {\n\n addKeys(_result.rows)\n setResults(_result)\n setLoading(false)\n }\n })\n }\n useEffect(getSummary, [filters, paginate.pagesize, paginate.offset]);\n\n\n const ucfirst = (string) => {\n return (string) ? string.charAt(0).toUpperCase() + string.slice(1) : \"\";\n }\n\n const downloadExcel = () =>{\n apiDownload(filters, \"orders/getExcel\");\n }\n\n const downloadSingle = (_order_id) =>{\n apiDownload({order_id : _order_id}, \"order/getExcel\");\n }\n\n\n const bookorder_columns = [\n\n {\n \"width\": \"10px\", key: 'blank'\n },\n\n {\n title: <small> Ordered</small>, width: \"160px\", ellipsis: true, dataIndex: 'date_ordered', key: 'date_ordered',\n render: (e) => {\n return moment(e * 1000).format(\"MMM Do YYYY - h:mma\");\n }\n },\n\n {\n title: <small>Action</small>, ellipsis: true, dataIndex: 'action', key: 'action', render: (e) => {\n return ucfirst(e);\n }\n },\n\n { title: <small>Qty</small>, ellipsis: true, dataIndex: 'quantity', key: 'quantity' },\n {\n title: <small>Value</small>, dataIndex: 'price', key: 'price',\n render: (e) => {\n return (e) ? \"$\" + addCommas(e) : \"\";\n },\n },\n {\n title: <small>Titles</small>, dataIndex: 'number_of_titles', key: 'number_of_titles', render: (e, f) => {\n return <a onClick={() => expandCell(f)}>{e} {pluralize(e, \"Title\", \"s\")}</a>;\n },\n },\n {\n title: <small>Ref#</small>, dataIndex: 'bookorder_id', key: 'bookorder_id', render: (e) => {\n return <Overlay component={<PreviousOrder bookorder_id={e} />}><a>{e}</a></Overlay>\n }\n },\n { title: <small>Cust PO#</small>, dataIndex: 'customer_purchase_order', key: 'customer_purchase_order' },\n\n {\n title: <small>Customer</small>, className: \"cellBorder\", ellipsis: true, dataIndex: 'name', key: 'name'\n },\n\n {\n title: <small>Status</small>, className: \"cellBorder\", dataIndex: 'ignore_status', \"width\": \"50px\", key: 'ignore_status', render: (e, f) => {\n return (\n <OrderStatus show_x bookorder_id={f.bookorder_id} ignore_status={e} />\n )\n }\n },\n\n\n {\n title: <small>Notes</small>, className: \"cellBorder\", dataIndex: 'store_note', ellipsis: true, key: 'store_note', render: (e, f) => {\n return <Notes bookorder_id={f.bookorder_id} note={e}/>\n },\n },\n\n {\n title: <a onClick={() => downloadExcel()}><small>XLS</small></a>, className: \"cellBorder\", dataIndex: 'store_note', width: \"42px\", key: 'store_note', render: (e, f) => {\n return <Button onClick={() => downloadSingle(f.bookorder_id)} icon={<FileExcelOutlined />} type=\"link\" size=\"small\"></Button>\n },\n },\n\n {\n dataIndex: 'actions', key: 'actions', width: \"70px\", title: <small></small>, dataIndex: 'billing', key: 'billing', render: (e, f) => {\n return (<ResendOrder bookorder_id={f.bookorder_id} />)\n }\n },\n\n\n ]\n\n const drawActions = () => {\n\n return (<Space><Button type=\"primary\" size=\"small\"><small>Resend</small></Button><Button icon={<FileExcelOutlined />} type=\"link\" size=\"small\"></Button> </Space>)\n }\n\n return (<>\n \n {((filters.auto_open && filters.customer_search) && <Overlay callback={() => setFilters({...filters, \"auto_open\" : false})} auto_open component={<PreviousOrder bookorder_id={filters.customer_search} />}></Overlay>)}\n \n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n <Table\n expandable expandIcon={<></>} size=\"small\"\n columns={bookorder_columns}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n loading={loading}\n pagination={false}\n expandIconColumnIndex={-1}\n expandedRowKeys={expanded}\n onExpand={(e) => { return false; }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Space, DatePicker, Menu, Dropdown, Tabs, Col, Statistic, Card } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport Html from \"../../utils/Html\";\nimport { Link } from \"react-router-dom\";\nimport moment from \"moment\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport CustomersTable from \"./CustomersTable\";\nimport TitlesTable from \"./TitlesTable\";\nimport OrdersTable from \"./OrdersTable\";\nimport { pluralize, addCommas } from \"../../utils/Utils\";\nimport conditional from \"../../utils/conditional\";\nimport Paginate from \"../Paginate\";\nexport default function CustomerPOTable(props) {\n\n const { filters, border = true } = props;\n const [loading, setLoading] = useState(false)\n const [table, setTable] = useState(\"table\");\n const [expanded, setExpanded] = useState([]);\n const [results, setResults] = useState({ rows: [], row_count: 0 });\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 20, offset: 0 });\n\n const expandCell = (_data, _table) => {\n if (!expanded.includes(_data.key)) {\n setTable(_table);\n setExpanded([_data.key]);\n } else {\n if (_table === table) {\n setExpanded([]);\n } else {\n setTable(_table);\n }\n }\n }\n\n // Fetch Data if not set\n const getSummary = () => {\n setLoading(true);\n let _filters = { ...filters }\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n apiCall(\"orders/getPurchase\", _filters, (_status, _results) => {\n if (_status) {\n addKeys(_results.rows);\n setResults(_results)\n setLoading(false);\n }\n })\n }\n useEffect(getSummary, [filters, paginate]);\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n const customer_pos_columns = [\n { key : \"blank\", width : \"10px\"},\n {\n title: <small>Ordered</small>, dataIndex: 'date_ordered', key: 'date_ordered', render: (e) => {\n return moment(e * 1000).format(\"MMM Do YYYY - h:mma\");\n },\n },\n { title: <small>Cust PO#</small>, dataIndex: 'customer_purchase_order', key: 'customer_purchase_order' },\n\n { title: <small>Quantity</small>, dataIndex: 'quantity', key: 'quantity' },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e) => {\n return (e) ? \"$\" + addCommas(e) : \"\";\n }\n },\n {\n title: <small>Titles</small>, dataIndex: 'number_of_titles', key: 'number_of_titles', render: (e, f) => {\n return <a onClick={() => expandCell(f, \"titles\")} type=\"link\">{e} {pluralize(e, \"Title\", \"s\")}</a>\n }\n },\n {\n title: <small>Orders</small>, dataIndex: 'number_of_orders', key: 'number_of_orders', render: (e, f) => {\n return <a onClick={() => expandCell(f, \"orders\")} type=\"link\">{e}</a>\n }\n },\n {\n title: <small>Customers</small>, dataIndex: 'number_of_customers', key: 'number_of_customers', render: (e, f) => {\n return <Button size=\"small\" onClick={() => expandCell(f, \"customers\")} type=\"link\">{e}</Button>\n }\n }\n ]\n\n\n\n const getTable = (_record) => {\n\n\n switch (table) {\n case \"titles\":\n let title_fltrs = { ...filters }\n title_fltrs[\"purchase_order\"] = _record.customer_purchase_order;\n title_fltrs[\"nesting\"] = \"purchase_order\";\n return <TitlesTable pagination={false} border={false} data={results} filters={title_fltrs} />\n break;\n\n case \"orders\":\n let order_fltrs = { ...filters }\n order_fltrs[\"purchase_order\"] = _record.customer_purchase_order;\n order_fltrs[\"nesting\"] = \"purchase_order\";\n return <OrdersTable pagination={false} border={false} data={results} filters={order_fltrs} />\n break;\n\n case \"customers\":\n let purchase_fltrs = { ...filters }\n purchase_fltrs[\"purchase_order\"] = _record.customer_purchase_order;\n purchase_fltrs[\"nesting\"] = \"purchase_order\";\n return <CustomersTable pagination={false} border={false} filters={purchase_fltrs} />\n break;\n }\n\n }\n\n const drawChildTable = (_record, _another) => {\n\n\n return (\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 0px\" }}>\n {getTable(_record)}\n </div>\n </div>\n )\n\n\n\n\n\n }\n\n\n\n\n return (\n <>\n\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n <Table\n expandable expandIcon={<></>} size=\"small\"\n columns={customer_pos_columns}\n loading={loading}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n pagination={false}\n expandIconColumnIndex={-1}\n expandedRowKeys={expanded}\n onExpand={(e) => { return false; }}\n expandedRowRender={(e) => { return drawChildTable(e) }}\n />\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n\n </>);\n\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Space, DatePicker, Menu, Dropdown, Tabs, Col, Statistic, Card } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport Html from \"../../utils/Html\";\nimport { Link } from \"react-router-dom\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport TitlesTable from \"./TitlesTable\";\nimport OrdersTable from \"./OrdersTable\";\nimport CustomerPOTable from \"./CustomerPOTable\";\nimport { pluralize, addCommas } from \"../../utils/Utils\";\nimport Paginate from \"../Paginate\";\n\nexport default function CustomersTable(props) {\n\n const { filters, border = true } = props;\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState([]);\n const [table, setTable] = useState(\"table\");\n const [results, setResults] = useState({ rows: [], row_count: 0 });\n const [paginate, setPaginate] = useState({ current: 1, pagesize: 20, offset: 0 });\n\n const expandCell = (_data, _table) => {\n if (!expanded.includes(_data.key)) {\n setTable(_table);\n setExpanded([_data.key]);\n } else {\n if (_table === table) {\n setExpanded([]);\n } else {\n setTable(_table);\n }\n }\n }\n\n const addKeys = (_arr) => {\n return (_arr.map((item) => {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n return item;\n }))\n }\n\n // Fetch Data if not set\n const getSummary = () => {\n setLoading(true)\n let _filters = {...filters}\n _filters.limit = paginate.pagesize;\n _filters.offset = paginate.offset;\n\n apiCall(\"orders/getCustomer\", _filters, (_status, _results) => {\n if (_status) {\n addKeys(_results.rows);\n setResults(_results)\n setLoading(false)\n }\n })\n }\n useEffect(getSummary, [filters, paginate]);\n\n\n\n const getTable = (_record) => {\n\n switch (table) {\n case \"titles\":\n let title_fltrs = { ...filters }\n title_fltrs[\"customer_id\"] = _record.customer_id;\n title_fltrs[\"nesting\"] = \"customer_id\";\n return <TitlesTable pagination={false} border={false} data={results} filters={title_fltrs} />\n\n case \"orders\":\n let order_fltrs = { ...filters }\n order_fltrs[\"customer_id\"] = _record.customer_id;\n order_fltrs[\"nesting\"] = \"customer_id\";\n return <OrdersTable pagination={false} border={false} data={results} filters={order_fltrs} />\n\n case \"purchase_orders\":\n let purchase_fltrs = { ...filters }\n purchase_fltrs[\"customer_id\"] = _record.customer_id;\n purchase_fltrs[\"nesting\"] = \"customer_id\";\n return <CustomerPOTable pagination={false} border={false} filters={purchase_fltrs} />\n }\n\n }\n\n\n const drawChildTable = (_record, _another) => {\n return (\n <div className=\"hideHover\" style={{ \"margin\": \"-7px\" }}>\n <div style={{ \"padding\": \"0 20px\" }}>\n <div style={{ \"marginTop\": \"0px\", \"borderTop\": \"none\", \"marginBottom\": \"0px\" }} className=\"closebar\">\n <Button style={{ \"float\": \"right\" }} onClick={() => setExpanded([])} size=\"small\" type=\"text\" icon={<small><CloseOutlined style={{ \"fontSize\": \"10px\" }} /></small>} />\n <br clear=\"both\" />\n </div>\n </div>\n <div style={{ \"padding\": \"0px 0px\" }}>\n {getTable(_record)}\n </div>\n </div>\n )\n }\n\n const customer_columns = [\n { key : \"blank\", width : \"10px\"},\n { title: <small>Name</small>, dataIndex: 'name', key: 'name' },\n {\n title: <small>Ordered</small>, dataIndex: 'date_ordered', key: 'date_ordered', render: (e) => {\n return moment(e * 1000).format(\"MMM Do YYYY - h:mma\");\n }\n },\n { title: <small>Quantity</small>, dataIndex: 'quantity', key: 'quantity' },\n {\n title: <small>Price</small>, dataIndex: 'price', key: 'price', render: (e) => {\n return (e) ? \"$\" + addCommas(e) : \"\";\n }\n },\n {\n title: <small>Titles</small>, dataIndex: 'number_of_titles', key: 'number_of_titles', render: (e, f) => {\n return <a onClick={() => expandCell(f, \"titles\")} type=\"link\">\n {e} {pluralize(e, \"Title\", \"s\")}\n </a>\n }\n },\n {\n title: <small>Orders</small>, dataIndex: 'number_of_orders', key: 'number_of_orders', render: (e, f) => {\n return <a onClick={() => expandCell(f, \"orders\")} type=\"link\">{e}</a>\n }\n },\n\n ]\n\n\n // strip purchase orders if already filtered..\n if (!filters.hasOwnProperty(\"nesting\")) {\n customer_columns.push(\n {\n title: <small>Purchase Orders</small>, dataIndex: 'number_of_purchase_orders', key: 'number_of_purchase_orders', render: (e, f) => {\n return <Button size=\"small\" onClick={() => expandCell(f, \"purchase_orders\")} type=\"link\">{e}</Button>\n }\n }\n )\n }\n\n return (\n <>\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n <Table expandable expandIcon={<></>} size=\"small\" pagination={true}\n columns={customer_columns}\n loading={loading}\n className={\"tableNoBorder\"}\n dataSource={results.rows}\n expandIconColumnIndex={-1}\n expandedRowKeys={expanded}\n onExpand={(e) => { return false; }}\n expandedRowRender={((record) => drawChildTable(record))}\n />\n <Paginate paginate={paginate} setPaginate={setPaginate} count={results.row_count} />\n </>);\n\n\n}","import { Space, Button } from \"antd\";\nimport moment from \"moment-timezone\";\nimport React from \"react\";\nimport { apiDownload } from \"../../utils/Api\";\n\nexport default function ActivityReport(props) {\n\n const { start_date = moment().unix(), end_date = moment.unix() } = props;\n\n // Jan 1 of last year until Dec 31 of last year\n const last_year_start = moment().subtract(1, 'year').startOf('year').startOf(\"day\").unix();\n const last_year_end = moment().subtract(1, 'year').endOf('year').endOf(\"day\").unix();\n\n // Jan 1 of this year until June 30 of this year\n const current_year_start = moment().startOf('year').startOf(\"day\").unix();\n const current_year_june = moment().month(5).endOf('month').endOf(\"day\").unix();\n\n const getPdfForDateRange = (_type = \"range\") => {\n\n let start_ts;\n let end_ts;\n\n switch (_type) {\n case \"last\":\n start_ts = last_year_start;\n end_ts = last_year_end;\n break;\n case \"current\":\n start_ts = current_year_start;\n end_ts = current_year_june;\n break;\n default:\n case \"range\":\n start_ts = start_date;\n end_ts = end_date;\n break;\n }\n\n\n apiDownload({ start_ts: start_ts, end_ts: end_ts }, \"order/getPdfForDateRange\");\n\n }\n\n\n return (\n <>\n <div class=\"ant-statistic\">\n <div class=\"ant-statistic-title\"><small>Ordering Activity</small></div>\n <div>\n <Space>\n <Button onClick={() => getPdfForDateRange(\"range\")} type=\"primary\" size=\"small\" ><small>Generate PDF from date range</small></Button>\n <Button onClick={() => getPdfForDateRange(\"last\")} type=\"primary\" size=\"small\" ><small>January Billing Report</small></Button>\n <Button onClick={() => getPdfForDateRange(\"current\")} type=\"primary\" size=\"small\" ><small>July Billing Report</small></Button>\n </Space>\n </div>\n </div>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Button, Space, DatePicker, Menu, Dropdown, Statistic, Input, Form, Select, Row, Col } from \"antd\";\nimport moment from \"moment\";\nimport { apiCall, apiDownload } from \"../../utils/Api\";\nimport { RollbackOutlined, FileExcelOutlined } from '@ant-design/icons';\nimport conditional from \"../../utils/conditional\";\nimport { FilterFilled, FilterOutlined, RedoOutlined } from '@ant-design/icons';\nimport CustomersTable from \"../../components/previous_orders/CustomersTable\";\nimport CustomerPOTable from \"../../components/previous_orders/CustomerPOTable\";\nimport OrdersTable from \"../../components/previous_orders/OrdersTable\";\nimport TitlesTable from \"../../components/previous_orders/TitlesTable\";\nimport { addCommas, objectToPath, objToPath, pathToObj } from \"../../utils/Utils\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport ActivityReport from \"./ActivityReport\";\n\nexport default function PreviousOrdersPage() {\n\n\n const { search = \"\" } = useParams();\n const [isFiltering, setIsFiltering] = useState(false);\n const history = useHistory();\n const [summary, setSummary] = useState({\n quantity: \"0\",\n value: \"0\",\n titles: \"0\",\n customer_purchase_orders: \"0\",\n customers: \"0\",\n });\n\n const [data, setData] = useState([]);\n const [loading, setLoading] = useState(true);\n\n const map = {\n start_date: \"s\",\n end_date: \"e\",\n show_filter: \"f\",\n customer_search: \"t\",\n keyword_search: \"k\",\n sort: \"v\",\n condition_code: \"c\",\n auto_open: \"o\",\n }\n\n\n let _init = pathToObj(history.location.pathname, map);\n\n const initFilters = {\n start_date: (_init.start_date) ? moment(parseInt(_init.start_date * 1000)).unix() : moment().add(-1, 'week').startOf('day').unix(),\n end_date: (_init.end_date) ? moment(parseInt(_init.end_date * 1000)).unix() : moment().endOf('day').unix(),\n show_filter: (_init.show_filter) ? _init.show_filter : \"customer\",\n customer_search: (_init.customer_search) ? _init.customer_search : search,\n keyword_search: (_init.keyword_search) ? _init.keyword_search : \"\",\n sort: (_init.sort) ? _init.sort : \"orders\",\n condition_code: (_init.condition_code) ? _init.condition_code : \"-1\",\n auto_open: (_init.auto_open) ? _init.auto_open : false,\n }\n\n const [filters, setFilters] = useState(initFilters);\n const [start, setStart] = useState(initFilters);\n\n const downloadExcel = () => {\n apiDownload(filters, \"orders/getExcel\", true);\n }\n\n const getSummary = () => {\n setLoading(true);\n apiCall(\"orders/getSummary\", filters, (_status, _result) => {\n if (_status) {\n setSummary(_result);\n setLoading(false);\n history.push(\"/reports/previous-orders/\" + objToPath(filters, map));\n }\n });\n }\n\n useEffect(getSummary, [filters]);\n\n\n\n const drawSummary = () => {\n\n return (\n <div className=\"bcg3 bc\" style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"10px 20px\", \"borderBottom\": \"1px solid\", \"borderTop\": \"1px solid\", \"width\": \"100%\" }}>\n <Row>\n <Col span={2}><Statistic valueStyle={{ \"fontSize\": \"16px\", \"fontWeight\": \"600\" }} loading={loading} title={<small>Orders</small>} value={summary.orders} /></Col>\n <Col span={3}><Statistic valueStyle={{ \"fontSize\": \"16px\", \"fontWeight\": \"600\" }} loading={loading} title={<small>Value</small>} value={(summary.value) ? \"$\" + addCommas(summary.value.toString()) : \"\"} /></Col>\n <Col span={2}><Statistic valueStyle={{ \"fontSize\": \"16px\", \"fontWeight\": \"600\" }} loading={loading} title={<small>Quantity</small>} value={summary.quantity} /></Col>\n <Col span={2}><Statistic valueStyle={{ \"fontSize\": \"16px\", \"fontWeight\": \"600\" }} loading={loading} title={<small>Titles</small>} value={summary.titles} /></Col>\n <Col span={3}><Statistic valueStyle={{ \"fontSize\": \"16px\", \"fontWeight\": \"600\" }} loading={loading} title={<small>Purchase Orders</small>} value={summary.customer_purchase_orders} /></Col>\n <Col span={2}><Statistic valueStyle={{ \"fontSize\": \"16px\", \"fontWeight\": \"600\" }} loading={loading} title={<small>Customers</small>} value={summary.customers} /></Col>\n <Col span={1}> </Col>\n <Col span={9}>\n <ActivityReport start_date={filters.start_date} end_date={filters.end_date} />\n </Col>\n </Row>\n <div className=\"shim\" />\n </div>\n\n )\n }\n\n\n const drawFilters = () => {\n\n\n return (\n <div style={{ \"paddingBottom\": \"0px\", \"margin\": \"0px 0px\", \"padding\": \"20px 20px 0px 20px\" }}>\n <Form size=\"small\" layout=\"vertical\">\n <Typography.Title style={{ \"lineHeight\": \"17px\" }} level={5}>\n <div>Previous Orders</div>\n </Typography.Title>\n\n <Divider dashed style={{ \"marginTop\": \"10px\", \"marginBottom\": \"15px\" }} />\n <Space>\n <Form.Item label={<small>Date Range</small>}>\n <DatePicker.RangePicker allowClear={false} style={{ \"fontSize\": \"10px\", \"width\": \"230px\" }} value={[moment(filters.start_date * 1000), (filters.end_date) ? moment(filters.end_date * 1000) : \"\"]} onChange={(e) => setFilters({ ...filters, \"start_date\": e[0].unix(), \"end_date\": e[1].unix() })} format=\"MMM D, YYYY\" />\n </Form.Item>\n\n <Form.Item label={<small>Users</small>}>\n <Select value={filters.show_filter} onChange={(e) => setFilters({ ...filters, \"show_filter\": e })} style={{ width: 100 }}>\n <Select.Option value=\"all\"><small>All</small></Select.Option>\n <Select.Option value=\"customer\"><small>Customers</small></Select.Option>\n <Select.Option value=\"store\" ><small>Store</small></Select.Option>\n <Select.Option value=\"guest\"><small>Guest</small></Select.Option>\n </Select>\n </Form.Item>\n\n <Form.Item initialValue={filters.keyword_search} label={<small>Product Search</small>} name=\"keyword_search\">\n <Input.Search allowClear enterButton onSearch={(e) => setFilters({ ...filters, \"keyword_search\": e })} placeholder=\"Keyword search\" style={{ \"width\": \"220px\" }} />\n </Form.Item>\n\n <Form.Item label={<small>Condition</small>}>\n <Select value={filters.condition_code} onChange={(e) => setFilters({ ...filters, \"condition_code\": e })} style={{ width: 80 }}>\n <Select.Option key={\"-1\"} value={\"-1\"}><small>None</small></Select.Option>\n {window.sitesettings.condition_codes.map(item => {\n return (<Select.Option key={item.code} value={item.code}><small>{item.name}</small></Select.Option>)\n })}\n </Select>\n </Form.Item>\n\n <Form.Item initialValue={filters.customer_search} label={<small>Order Search</small>} name=\"customer_search\">\n <Input.Search allowClear enterButton onSearch={(e) => setFilters({ ...filters, \"customer_search\": e })} placeholder=\"Customer, ref #, email, promo\" style={{ \"width\": \"250px\" }} />\n </Form.Item>\n\n <Form.Item label={<small>Grouping</small>}>\n <Select value={filters.sort} onChange={(e) => setFilters({ ...filters, \"sort\": e })} style={{ width: 120 }}>\n <Select.Option value=\"orders\"><small>Orders</small></Select.Option>\n <Select.Option value=\"titles\"><small>Titles</small></Select.Option>\n <Select.Option value=\"customer_pos\" ><small>Purchase Orders</small></Select.Option>\n <Select.Option value=\"customers\"><small>Customers</small></Select.Option>\n </Select>\n </Form.Item>\n\n <Form.Item label={<small> </small>}>\n <Button disabled={(JSON.stringify(start) === JSON.stringify(filters))} onClick={() => setFilters(start)} type=\"secondary\"><small><RollbackOutlined /> Reset</small></Button>\n </Form.Item>\n\n <Form.Item label={<small> </small>}>\n <Button onClick={() => downloadExcel()} size=\"small\" type=\"primary\"><small><FileExcelOutlined /> Export XLS</small></Button>\n </Form.Item>\n\n\n\n\n </Space>\n </Form>\n </div>\n )\n\n\n }\n\n\n return (\n <>\n\n <Layout className=\"layout\">\n <Layout.Content className=\"layoutHeader\" style={{ \"padding\": \"0px\" }} >\n\n {drawFilters()}\n\n\n {drawSummary()}\n\n\n\n <conditional.true value={(filters.sort === \"orders\")}>\n <OrdersTable pagination setFilters={setFilters} filters={filters} />\n </conditional.true>\n\n <conditional.true value={(filters.sort === \"titles\")}>\n <TitlesTable filters={filters} data={data} />\n </conditional.true>\n\n <conditional.true value={(filters.sort === \"customer_pos\")}>\n <CustomerPOTable filters={filters} />\n </conditional.true>\n\n <conditional.true value={(filters.sort === \"customers\")}>\n <CustomersTable filters={filters} />\n </conditional.true>\n\n\n </Layout.Content>\n\n\n </Layout>\n\n\n\n\n\n </>\n )\n\n\n\n return (\n <>\n\n <Layout style={{ \"backgroundColor\": \"#fff\" }}>\n <Layout.Content style={{ \"borderLeft\": \"1px solid #eee\", \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n\n <Typography.Title level={4}>\n\n <span style={{ \"fontSize\": \"10px\", \"color\": \"#ccc\", \"letterSpacing\": \"2px\" }}>PURCHASING</span><br />\n <div style={{ \"marginTop\": \"-5px\" }}> Previous Orders <Button onClick={() => setIsFiltering(!isFiltering)} type=\"link\">{(isFiltering) ? <FilterFilled /> : <FilterOutlined />}</Button> </div>\n\n </Typography.Title>\n\n <conditional.true value={(!isFiltering)}>\n <Divider />\n </conditional.true>\n <conditional.true value={(isFiltering)}>\n\n </conditional.true>\n\n <Typography.Title level={5}>Summary <em><small style={{ \"color\": \"#AAA\", \"fontWeight\": \"normal\" }}> - {moment(filters.start_date * 1000).format(\"MMMM Do YYYY\")} - {moment(filters.end_date * 1000).format(\"MMMM Do YYYY\")}</small></em></Typography.Title>\n <br />\n\n <div className=\"shim\"></div>\n\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Divider dashed />\n\n\n\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import { Space, Tooltip } from \"antd\";\nimport moment from \"moment-timezone\";\nimport React from \"react\";\nimport { addCommas, adjustOpacity, getPercentageIncrease } from \"../../utils/Utils\";\n\nexport default function Candle(props) {\n\n const { bar = false, height = 170, color = \"#64a6da\", data = { now: 0, then: 0, date: \"\" }, high = 0 } = props;\n\n const per = (Math.max(0, data.now) / high) * 100;\n const diff = Math.max(0, data.now) - Math.max(0, data.then);\n const plus = (diff > 0) ? (diff / high) * 100 : 0;\n const minus = (diff <= 0) ? (diff / high) * -100 : 0;\n\n const per_pixel = height * (per / 100);\n const minus_pixel = (minus) ? height * (minus / 100) : 0;\n const plus_pixel = (plus) ? height * (plus / 100) : 0;\n\n\n const drawToolTip = () => {\n return (\n <Space size={0} direction=\"vertical\">\n <div><small><strong>Week ending:</strong></small></div>\n <small><em style={{\"opacity\" : \"0.8\"}}>{moment(data.date).format(\"MMM Do, YYYY\")}:</em> ${addCommas(data.now)}\n {((data.now > data.then) && <div style={{ \"color\": \"#7ded88\", \"display\": \"inline-block\" }}><small>  {getPercentageIncrease(data.now, data.then, 1)}%</small></div>)}\n {((data.now < data.then) && <div style={{ \"color\": \"#ea8282\", \"display\": \"inline-block\" }}><small>  {getPercentageIncrease(data.now, data.then, 1)}%</small></div>)}\n </small>\n <small><em style={{\"opacity\" : \"0.8\"}}>{moment(data.date).add(-52, \"weeks\").format(\"MMM Do, YYYY\")}: </em> ${addCommas(data.then)}</small>\n </Space>\n )\n }\n\n const drawCandle = () => {\n // Horisontal Bar\n if (bar) {\n return (\n <div style={{ \"lineHeight\": \"0px\" }}>\n <Tooltip title={drawToolTip()}>\n <Space size={0}>\n <div style={{ \"backgroundColor\": adjustOpacity(color, 50), \"width\": per_pixel + 1 + \"px\", \"height\": \"10px\" }}>\n <div style={{ \"float\": \"right\", \"backgroundColor\": color, \"width\": plus_pixel + \"px\", \"height\": \"10px\" }}> </div>\n </div>\n <div style={{ \"backgroundColor\": \"#ea8282\", \"width\": minus_pixel + \"px\", \"height\": \"10px\" }}> </div>\n </Space>\n </Tooltip>\n </div>\n )\n }\n\n // Vertical Bar\n return (\n <div key={data.date} className=\"bc2\" style={{ \"borderRight\": \"1px solid\" }}>\n <Tooltip title={drawToolTip()}>\n <div className=\"lighten\" style={{ \"height\": height + \"px\", \"display\": \"flex\", \"width\": \"7px\", \"flexDirection\": \"column\", \"justifyContent\": \"end\", \"cursor\": \"default\" }}>\n <div style={{ \"display\": \"block\", \"height\": minus_pixel + \"px\", \"width\": \"7px\", \"backgroundColor\": \"#ea8282\", \"margin\": \"0 auto\", \"opacity\": \"1\" }}> </div>\n <div style={{ \"display\": \"block\", \"height\": per_pixel + \"px\", \"width\": \"7px\", \"backgroundColor\": adjustOpacity(color, 50) }}>\n <div style={{ \"display\": \"block\", \"height\": plus_pixel + \"px\", \"width\": \"7px\", \"backgroundColor\": color, \"margin\": \"0 auto\", \"opacity\": \"1\" }}> </div>\n </div>\n </div>\n </Tooltip>\n </div>\n )\n }\n\n return drawCandle();\n}","import { Divider, Space } from \"antd\";\nimport moment from \"moment-timezone\";\nimport React from \"react\";\nimport { addCommas } from \"../../utils/Utils\";\nimport Candle from \"./Candle\";\n\nexport default function SalesComparisonsChart(props) {\n\n const { color = \"#64a6da\", sales = [], title = \"Average Sales\" } = props;\n const high = Math.max(...sales.map(i => (i.now > i.then) ? i.now : i.then))\n\n // Draw unique months - left as an object in case we want to be super acurate with days later...\n const drawMonths = (_arr = []) => {\n if (!_arr.length > 2) {\n return (<></>)\n }\n let _months = [];\n let _p = \"\";\n _arr.forEach(week => {\n let d = moment(week.date);\n if (d.format(\"MMYY\") !== _p) {\n _months.push(\n {\n days: d.daysInMonth(),\n month: d.format(\"MMM\"),\n year: d.format(\"YYYY\"),\n }\n )\n _p = d.format(\"MMYY\");\n }\n })\n return (\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"space-between\", \"fontSize\": \"10px\", \"opacity\": \"0.8\" }}>\n {_months.map((item, index) => {\n return (\n <div style={{ \"marginTop\": \"-5px\", \"textAlign\": \"center\" }}>\n <div className=\"shim\" />\n {item.month}\n {((item.month === \"Jan\" || index === 0) &&\n <div style={{ \"position\": \"absolute\", \"marginTop\": \"-5px\" }}>{item.year}</div>\n )}\n </div>\n )\n })}\n </div>\n )\n }\n\n return (\n <>\n\n <div style={{ \"width\": \"840px\" }}>\n <strong className=\"c\" style={{ \"fontSize\": \"13px\" }}>{title}</strong>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <small style={{ \"opacity\": \"0.7\" }}>High : <strong>${addCommas(high)}</strong></small>\n <div></div>\n </Space>\n </div>\n <div>\n <Space>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": color }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Increase Year-over-year</div>\n </Space>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#ea8282\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Decrease Year-over-year</div>\n </Space>\n </Space>\n </div>\n <div className=\"shim\" /><div className=\"shim\" />\n <Space size={0}>\n {sales.map(item => {\n return <Candle color={color} high={high} data={item} />\n })}\n </Space>\n <div className=\"shim\" />\n <div style={{ \"width\": \"830px\" }}>\n {drawMonths(sales)}\n </div>\n </div>\n </>\n )\n}","import React from \"react\";\nimport { Divider, Space, Tooltip } from \"antd\";\nimport { addCommas, findMedian, getSan } from \"../../utils/Utils\";\nimport { useSession } from \"../../utils/Session\";\n\nexport default function SalesRelativeChart(props) {\n\n const { sales = [], height = 100, title = \"Sales relative to\" } = props;\n // Mike N asked for median * 3 or 4, but too many are clipped\n const high = findMedian(sales.map(i => i.volume)) * 10;\n\n const [session, setSession] = useSession();\n let san = getSan(session.corp_id, window.sitesettings.stores);\n\n const scale = (x) => {\n return Math.max(0, x);\n }\n\n const drawCandle = (_item, _index) => {\n\n let per = (scale(_item.volume) / scale(high));\n let per_pixel = height * per;\n per_pixel += 1;\n let alt = (_index % 2);\n\n if (_item.me) {\n let _style = { position: \"relative\" }\n return (\n <Space size={0} direction=\"vertical\">\n <div style={{ \"width\": \"2px\", \"height\": ((height - per_pixel) + 1) + \"px\", \"backgroundColor\": (alt) ? \"#ddd\" : \"#ddd\" }}> </div>\n <div style={{ \"width\": \"2px\", \"height\": per_pixel + \"px\", \"backgroundColor\": (alt) ? \"#005191\" : \"#005191\", \"position\": \"relative\", \"bottom\": \"0px\" }}> </div>\n <div style={{ \"height\": \"0px\", \"width\": \"2px\", \"position\": \"absolute\", \"zIndex\": \"1\", \"marginTop\": \"2px\" }}> <div style={_style}><nobr><div><span className=\"grid-line\"></span><strong style={{ ..._style, \"display\": \"inline-block\" }}>{san} (${addCommas(_item.volume)})</strong></div></nobr></div></div>\n </Space>\n )\n }\n return (<div style={{ \"width\": \"2px\", \"height\": per_pixel + \"px\", \"backgroundColor\": (alt) ? \"#4fac60\" : \"#a6d5af\" }}> </div>)\n }\n\n return (\n <div style={{ \"maxWidth\": \"870px\", \"overflow\": \"hidden\" }}>\n <strong style={{ \"fontSize\": \"13px\" }}>{title}</strong>\n <div>Sorted from largest to smallest, each bar represents one store, and your store is blue</div>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div style={{ \"width\": \"760px\" }}>\n <div style={{ \"cursor\": \"pointer\" }}>\n <Space>\n <Tooltip title={<small>Your store</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#3273a6\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>You</div>\n </Space>\n </Tooltip>\n <Tooltip title={<small>Other stores</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#72bc7f\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Others</div>\n </Space>\n </Tooltip>\n </Space>\n </div>\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"flex-start\", \"fontSize\": \"10px\", \"opacity\": \"0.8\", \"alignItems\": \"end\", \"height\": \"100px\", \"overflow\": 'hidden' }}>\n {sales.map((item, index) => {\n return drawCandle(item, index);\n })}\n </div>\n </div>\n )\n}","import { Divider, Row, Col, Space, Tooltip } from \"antd\";\nimport React from \"react\";\nimport { adjustOpacity } from \"../../utils/Utils\";\nimport Candle from \"./Candle\";\n\nexport default function VolumeBySubject(props) {\n\n const { title = \"\", volume = [], all = {} } = props;\n\n const avgHigh = Math.max(...volume.map(i => {\n if (!i.hasOwnProperty(\"all_volume_then\") || !i.hasOwnProperty(\"all_volume_then\")) {\n return 0;\n }\n return (i.all_volume_now > i.all_volume_then) ? i.all_volume_now : i.all_volume_then\n }));\n const storeHigh = Math.max(...volume.map(i => (i.me_volume_now > i.me_volume_then) ? i.me_volume_now : i.me_volume_then))\n\n function scale(x) {\n return x;\n return Math.pow(x, 1);\n }\n\n\n\n const drawRow = (item) => {\n\n let {\n all_volume_then = 0,\n all_volume_now = 0,\n me_volume_then = 0,\n me_volume_now = 0,\n } = item;\n\n // Calculate percent of sales & YOY change\n let percent_volume = me_volume_now / all.me_volume_now || 0;\n let average_percent_volume = all_volume_now / all.all_volume_now || 0;\n\n let percent_change = (me_volume_now - me_volume_then) / me_volume_then || 0;\n let average_percent_change = (all_volume_now - all_volume_then) / all_volume_then || 0;\n\n\n\n\n return (\n <div className=\"bc lighten\" style={{ \"fontSize\": \"10px\" }}>\n <Row align=\"middle\">\n <Col flex={\"70px\"}>\n <div style={{ \"color\": \"#64a6da\" }}>{(percent_volume * 100).toFixed(0)}% ({(percent_change * 100).toFixed(0)}%)</div>\n <div style={{ \"color\": \"#4fac60\" }}>{(average_percent_volume * 100).toFixed(0)}% ({(average_percent_change * 100).toFixed(0)}%)</div>\n </Col>\n <Col flex={\"200px\"}>\n <div style={{ \"color\": (average_percent_change > percent_change) ? \"#e33535\" : \"inherit\" }}>{item.subject}</div>\n </Col>\n <Col flex={\"auto\"}>\n <div>\n <Space size={1} direction=\"vertical\">\n <Candle height={590} bar={true} color={\"#64a6da\"} high={scale(storeHigh)} data={{ now: scale(me_volume_now.toFixed(0)), then: scale(me_volume_then.toFixed(0)) }} />\n <Candle height={590} bar={true} color={\"#4fac60\"} high={scale(avgHigh / volume.length)} data={{ now: scale((all_volume_now / volume.length).toFixed(0)), then: scale((all_volume_then / volume.length).toFixed(0)) }} />\n </Space>\n </div>\n </Col>\n </Row>\n <Divider style={{ \"margin\": \"5px 0px\" }} />\n </div>\n )\n }\n\n return (\n <>\n <div style={{ \"width\": \"870px\" }}>\n <strong style={{ \"fontSize\": \"13px\" }}>{title}</strong>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div style={{ \"cursor\": \"pointer\" }}>\n <Space>\n <Tooltip title={<small>Increase compared to previous year.</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#64a6da\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Increase (You)</div>\n </Space>\n </Tooltip>\n <Tooltip title={<small>Increase compared to previous year.</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#4fac60\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Increase (Others)</div>\n </Space>\n </Tooltip>\n <Tooltip title={<small>Decrease compared to previous year.</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#ea8282\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Decrease</div>\n </Space>\n </Tooltip>\n </Space>\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n {volume.map(item => drawRow(item))}\n </div>\n </>\n )\n}","import { Col, Divider, Row, Space, Tooltip } from \"antd\";\nimport React from \"react\";\nimport { useSession } from \"../../utils/Session\";\nimport { clamp, getSan, sum } from \"../../utils/Utils\";\n\nexport default function YearOverYear(props) {\n\n const { title = \"\", overall_change = 0, volume = [], height = 120 } = props;\n const pers = [\"100+\", \"75\", \"50\", \"25\", \"0\", \"-25\", \"-50\", \"-75\", \"-100\"];\n\n const [session, setSession] = useSession();\n let san = getSan(session.corp_id, window.sitesettings.stores);\n\n const my_pos = volume.findIndex(item => item.me);\n const avg = sum(volume, \"change\") / volume.length;\n const avg_vol = sum(volume, \"volume\") / volume.length;\n\n\n\n const calculateChange = (_change, _buffer) => {\n let calculated = 120 * (_change / 100);\n calculated = 120 - calculated;\n calculated = calculated - _buffer;\n console.log(calculated)\n return calculated.toString() + \"px\";\n }\n\n const getWidth = (_vol) => {\n let w = 1;\n if (_vol > (.66 * avg_vol)) {\n w = 2\n }\n if (_vol > (1.33 * avg_vol)) {\n w = 5\n }\n return w;\n }\n\n let box_width = 0;\n\n volume.forEach(element => {\n box_width += getWidth(element.volume);\n });\n\n const drawRow = (item, index, flip) => {\n\n let alt = (index % 2);\n let pixel = 0;\n let negative = false;\n if (item.change < 0) {\n pixel = (item.change * -1) * height;\n } else {\n pixel = item.change * height;\n }\n\n let _style = {\n position: \"relative\",\n }\n\n if (my_pos > volume.length / 2) {\n _style.textAlign = \"center\";\n _style.transform = \"scaleX(-1)\";\n } else {\n\n _style.textAlign = \"center\";\n }\n\n\n let w = getWidth(item.volume);\n\n\n\n\n pixel = clamp(pixel, 0, height);\n\n if (item.me) {\n\n if (flip) {\n return (\n <Space size={0} direction=\"vertical\">\n <div style={{ \"width\": w + \"px\", \"height\": pixel + \"px\", \"backgroundColor\": (alt) ? \"#005191\" : \"#005191\", \"position\": \"relative\", \"bottom\": \"0px\" }}> </div>\n <div className=\"grid-line\" style={{ \"width\": w + \"px\", \"height\": height - pixel + \"px\", \"display\": \"flex\", \"alignItems\": \"end\" }}> </div>\n <div style={{ \"height\": \"20px\", \"width\": w + \"px\" }}>\n <div style={_style}><nobr><span style={{ \"color\": \"#ddd\" }}></span><strong style={{ ..._style, \"display\": \"inline-block\" }}>{san} ({(item.change * 100).toFixed(2)}%)</strong></nobr></div>\n </div>\n </Space>\n )\n }\n return (\n <Space size={0} direction=\"vertical\">\n <div style={{ \"height\": \"15px\", \"width\": \"2px\" }}>\n <div style={_style}><nobr><span style={{ \"color\": \"#ddd\" }}></span><strong style={{ ..._style, \"display\": \"inline-block\" }}>{san} ({(item.change * 100).toFixed(2)}%)</strong></nobr></div>\n </div>\n <div className=\"grid-line\" style={{ \"width\": w + \"px\", \"height\": height - pixel + \"px\" }}> </div>\n <div style={{ \"width\": w + \"px\", \"height\": pixel + \"px\", \"backgroundColor\": (alt) ? \"#005191\" : \"#005191\", \"position\": \"relative\", \"bottom\": \"0px\" }}> </div>\n </Space>\n )\n }\n\n return (\n <div style={{ \"width\": w + \"px\", \"position\": \"relative\", \"top\": \"0px\", \"height\": pixel + \"px\", \"backgroundColor\": (alt) ? \"#4fac60\" : \"#a6d5af\" }}> </div>\n )\n\n }\n\n return (\n <>\n <div style={{ \"width\": \"800px\" }}>\n <strong style={{ \"fontSize\": \"13px\" }}>{title}</strong>\n <div>Each vertical bar represents one store and the % increase or decrease over the same period in the previous year</div>\n <div>The width of each bar represents the store'e relative size (small, medium, large)</div>\n <div>Your store is represented by the blue bar</div>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div>\n <Space style={{ \"cursor\": \"pointer\" }}>\n <Tooltip title={<small>Your sales change year over year.</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#3273a6\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Your store</div>\n </Space>\n </Tooltip>\n <Tooltip title={<small>Others sales change year over year.</small>}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#72bc7f\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}>Other stores</div>\n </Space>\n </Tooltip>\n </Space>\n </div>\n <br clear=\"all\" />\n <Row>\n <Col className=\"bc\" flex={\"50px\"}>\n {pers.map((item, index) => {\n return (<div key={index} style={{ \"height\": \"30px\", \"lineHeight\": \"30px\" }}>{item}%</div>)\n })}\n </Col>\n <Col flex={box_width + \"px\"}>\n <div style={{ \"position\": \"absolute\", \"zIndex\": \"1\", \"top\": calculateChange(overall_change, 7.5) }}>\n <Space>\n <div style={{ \"width\": box_width + \"px\", \"borderBottom\": \"1px solid #3273a6\" }}> </div>\n <div>\n <div style={{ \"marginTop\": \"15px\", \"color\": \"#3273a6\" }}>\n <nobr><strong>{overall_change.toFixed(1)}%</strong></nobr>\n <div style={{\"position\" : \"absolute\", \"width\" : \"80px\", \"lineHeight\" : \"12px\"}}>\n average change of all stores\n </div>\n </div>\n </div>\n </Space>\n </div>\n <div className=\"grid-lines\" style={{ \"height\": \"250px\", \"marginTop\": \"15px\", width : (box_width + 1) + \"px\"}}>\n <div>\n <Row>\n <Col flex={\"auto\"}>\n <div style={{ \"marginTop\": \"120px\" }}>\n <div style={{ \"height\": \"120px\" }}>\n <Space align=\"start\" size={0}>\n {volume.filter(item => item.change < 0).map((item, index) => drawRow(item, index, true))}\n </Space>\n </div>\n </div>\n </Col>\n <Col flex={\"auto\"}>\n <div style={{ \"height\": \"120px\", \"display\": \"flex\", \"alignItems\": \"end\" }}>\n <Space align=\"end\" size={0}>\n {volume.filter(item => item.change >= 0).map((item, index) => drawRow(item, index, false))}\n </Space>\n </div>\n </Col>\n </Row>\n </div>\n </div>\n </Col>\n </Row>\n </div>\n </>\n )\n}","import { Divider, Space, Statistic } from \"antd\";\nimport React from \"react\";\nimport { ArrowDownOutlined, ArrowUpOutlined } from '@ant-design/icons';\nimport { getPercentageIncrease } from \"../../utils/Utils\";\nimport moment from \"moment\";\nexport default function SalesSummary(props) {\n\n const { sales = [], avgsales = [], title = \"Summary\" } = props;\n\n const {\n then = 0,\n now = 0,\n date = \"\"\n } = sales[sales.length - 1] || {};\n\n const avg = avgsales[avgsales.length - 1] || { now: 0, then: 0, date: \"\" };\n\n const diff = getPercentageIncrease(now, then, 1);\n const avg_diff = getPercentageIncrease(avg.now, avg.then, 1);\n\n return (\n <div>\n <strong style={{ \"fontSize\": \"13px\" }}>{title}</strong>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div>\n <Space size={50} align=\"center\">\n\n <Statistic\n title={<>Week ending on {moment(date).format(\"MMM, Do, YYYY\")}</>}\n value={now}\n precision={0}\n prefix=\"$\"\n />\n\n <Statistic\n title=\"YOY % change\"\n value={diff}\n precision={1}\n valueStyle={{ color: (diff < 0) ? '#e33535' : '#3f8600' }}\n prefix={(diff < 0) ? <ArrowDownOutlined /> : <ArrowUpOutlined />}\n suffix=\"%\"\n />\n\n <Statistic\n title=\"Other stores average YOY\"\n value={avg_diff}\n precision={1}\n valueStyle={{ color: (avg_diff < 0) ? '#e33535' : '#3f8600' }}\n prefix={(avg_diff < 0) ? <ArrowDownOutlined /> : <ArrowUpOutlined />}\n suffix=\"%\"\n />\n\n </Space>\n </div>\n <br />\n </div>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Space, Radio, Select, Form, Row, Col, Spin, Affix } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport SalesComparisonsChart from \"./SalesComparisonsChart\";\nimport SalesRelativeChart from \"./SalesRelativeChart\";\nimport VolumeBySubject from \"./VolumeBySubject\";\nimport YearOverYear from \"./YearOverYear\";\nimport SalesSummary from \"./SalesSummary\";\n\nexport default function SalesComparisonsPage() {\n\n const [subjects, setSubjects] = useState([]);\n const [avgSales, setAvgSales] = useState({ sales: [] });\n const [relativeSales, setRelativeSales] = useState({ sales: [] });\n const [sales, setSales] = useState({ sales: [] });\n const [vbs, setVbs] = useState({ volume: [] });\n const [yoy, setYoy] = useState({ yoy: [], overall_change: 0 });\n const [loading, setLoading] = useState(true);\n\n const regions = [\n { key: \"\", value: \"All Regions\" },\n { key: \"US\", value: \"USA\" },\n { key: \"CA\", value: \"Canada\" },\n { key: \"CA-W\", value: \"Canada West\" },\n { key: \"CA-E\", value: \"Canada East\" },\n ]\n\n const [validDates, setValidDates] = useState([]);\n\n const [filters, setFilters] = useState({\n show_actual: true,\n region: (window.sitesettings.is_canadian) ? \"CA\" : \"US\",\n subject_code: \"all\", \n time_weeks: 1,\n scfilt: \"\",\n start_date: false,\n end_date: false,\n })\n\n const subject = subjects.find(item => item.code === filters.subject_code) || { name: \"All Subjects\" }\n const date = validDates.find(item => (item.start === filters.start_date)) || { name: \"1 Week\" }\n const reg = regions.find(item => item.key === filters.region) || \"All Regions\";\n const weekly_title = <>Your store's weekly sales for the previous two years <em>({subject.name})</em></>;\n const summary_title = <>{subject.name}</>;\n const average_title = <>Average sales at {avgSales.store_count} stores <em>({reg.value || \"All Regions\"}, {subject.name})</em></>;\n const yoy_title = <>Each store's change in sales over {date.name} <em>({reg.value}, {yoy.yoy.length} stores, {subject.name})</em></>;\n const sales_title = <> Each store's sales over {date.name} <em>({reg.value}, {avgSales.store_count} stores, {subject.name})</em></>;\n const volume_title = <>Volume and Change in Volume by Subject <em>({reg.value || \"All Regions\"}, {date.name})</em></>;\n\n const getSales = (_start = false, _end = false) => {\n setLoading(true);\n let _filters = { ...filters }\n if (_start || _end) {\n _filters.start_date = _start;\n _filters.end_date = _end;\n }\n\n apiCall(\"reports/avgSales\", {..._filters, subject_code: _filters.subject_code}, (_status, _result) => {\n if (_status) {\n setAvgSales(_result);\n }\n })\n\n apiCall(\"reports/sales\", { show_actual: _filters.show_actual, subject_code: _filters.subject_code }, (_status, _result) => {\n if (_status) {\n setSales(_result);\n }\n })\n\n apiCall(\"reports/relativeSales\", _filters, (_status, _result) => {\n if (_status) {\n setRelativeSales(_result)\n }\n })\n\n apiCall(\"reports/volumeBySubject\", _filters, (_status, _result) => {\n if (_status) {\n setVbs(_result)\n }\n })\n\n apiCall(\"reports/yoy\", _filters, (_status, _result) => {\n if (_status) {\n setYoy(_result);\n }\n setLoading(false);\n })\n }\n\n const getValidDates = () => {\n // had dates, no need to refetch\n if (validDates.length > 0) {\n getSales();\n return;\n }\n\n apiCall(\"reports/getValidDates\", {}, (_status, _result) => {\n if (_status) {\n setFilters({ ...filters, \"start_date\": _result[0].start, \"end_date\": _result[0].end })\n setValidDates(_result.slice(0,7));\n }\n apiCall(\"data/getSubjectCodes\", {}, (_status, _result) => {\n if (_status) {\n setSubjects(_result.subjects);\n }\n })\n })\n\n }\n\n useEffect(getValidDates, [filters]);\n\n const drawFilters = () => {\n return (\n <Space direction=\"vertical\">\n <strong style={{ \"fontSize\": \"13px\" }}>Filters</strong>\n <Space>\n <div>\n <div><label><small>Sales volume</small></label></div>\n <Radio.Group value={filters.show_actual} onChange={(e) => setFilters({ ...filters, \"show_actual\": (e.target.value) ? true : false })} buttonStyle=\"solid\">\n <Radio.Button value={true}><small>Actual</small></Radio.Button>\n <Radio.Button value={false}><small>Weighted</small></Radio.Button>\n </Radio.Group>\n </div>\n <div>\n <div><label><small>Type</small></label></div>\n <div className=\"ant-radio-group-solid\">\n <Radio.Group value={filters.scfilt} onChange={(e) => setFilters({ ...filters, \"scfilt\": e.target.value })} buttonStyle=\"solid\">\n <Radio.Button value=\"\"><small>All</small></Radio.Button>\n <Radio.Button value=\"CHR\"><small>Christian</small></Radio.Button>\n <Radio.Button value=\"SEC\"><small>Secular</small></Radio.Button>\n </Radio.Group>\n </div>\n </div>\n </Space>\n {((!filters.show_actual) && <div style={{\"width\" : \"270px\", \"lineHeight\" : \"14px\"}}>\n <small>Weighted sales reduces the number of copies sold of individual titles when only one store is selling a large number of copies of a title relative to all stores. Examples are class sets or an author event. </small>\n </div>)}\n <div>\n <div><label><small>Subject</small></label></div>\n <Select showSearch value={filters.subject_code} onChange={(e) => setFilters({ ...filters, \"subject_code\": e })} style={{ width: \"100%\" }}>\n <Select.Option value=\"all\"><small>All</small></Select.Option>\n {subjects.map((item, index) => {\n return (<Select.Option key={item.code} value={item.code}><small>{item.name}</small></Select.Option>)\n })}\n </Select>\n </div>\n <Space>\n <div>\n <div><label><small>Date Range</small></label></div>\n <Select onChange={(e) => setFilters({ ...filters, \"start_date\": validDates[e].start, \"end_date\": validDates[e].end })} defaultValue={0} style={{ width: 150 }}>\n {validDates.map((item, index) => {\n return (<Select.Option key={item.name} value={index}><small>{item.name}</small></Select.Option>)\n })}\n </Select>\n </div>\n <div>\n <div><label><small>Region</small></label></div>\n <Select value={filters.region} onChange={(e) => setFilters({ ...filters, \"region\": e })} style={{ width: 110 }}>\n {regions.map((item, index) => {\n return (<Select.Option key={index} value={item.key}><small>{item.value}</small></Select.Option>)\n })}\n </Select>\n </div>\n </Space>\n </Space>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Industry Sales Comparisons\"\n description={<div style={{ \"lineHeight\": \"14px\" }}>Your store's sales compared to other independents. Sales of new books (978,979 EANs) only (no remainders or used books)</div>}\n />\n <Layout.Content style={{ \"padding\": \"20px\", \"fontSize\": \"10px\" }} >\n <Row gutter={15}>\n <Col flex={\"885px\"}>\n <Spin spinning={loading}>\n <SalesSummary title={summary_title} avgsales={avgSales.sales} sales={sales.sales} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <SalesComparisonsChart title={weekly_title} color={\"#64a6da\"} sales={sales.sales} />\n <br clear=\"both\" />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <SalesComparisonsChart title={average_title} color={\"#4fac60\"} sales={avgSales.sales} />\n <br clear=\"both\" />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <YearOverYear title={yoy_title} overall_change={yoy.overall_change} volume={yoy.yoy} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <SalesRelativeChart title={sales_title} sales={relativeSales.sales} />\n <br clear=\"both\" />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <VolumeBySubject title={volume_title} all={vbs.all_subjects} volume={vbs.rows} />\n </Spin>\n </Col>\n <Col flex={\"auto\"}>\n <Affix offsetTop={100}>\n <div className=\"bc\" style={{ \"padding\": \"15px\", \"border\": \"1px solid\", \"borderRadius\": \"3px\" }}>\n <Form size=\"small\" layout=\"vertical\">{drawFilters()}</Form>\n </div>\n </Affix>\n </Col>\n </Row>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Pie } from '@ant-design/charts';\nimport { Divider, message, Row, Col, Space } from \"antd\";\nimport { sum, addCommas } from \"../../utils/Utils\";\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nexport default function UsageDevices(props) {\n\n const { filters = { start_date: moment(), end_date: moment() } } = props;\n const [results, setResults] = useState({ labels: [], datasets: [{ data: [] }] });\n\n const [hover, setHover] = useState({ key: \"\", value: 0, opacity: 0 })\n const fetchDevices = () => {\n let obj = {\n table: \"devices\",\n chart_type: \"pie\",\n include_keys: JSON.stringify([\"linux\", \"mac\", \"windows\", \"android\", \"ios\", \"ipad\"]),\n start_ts : filters.start_date.unix(), \n end_ts : filters.end_date.unix()\n }\n\n apiCall(\"site_analytics/get\", obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n } else {\n message.error(_result.error)\n }\n })\n }\n\n useEffect(fetchDevices, [filters]);\n\n const parseData = () => {\n let arr = [];\n \n results.labels.forEach((_label, _index) => {\n\n // let f = arr.find(item => item.label === _label)\n\n // if(f){\n // f.value += parseInt(results.datasets[0].data[_index]);\n // } else {\n // arr.push({\n // label: _label,\n // value: parseInt(results.datasets[0].data[_index])\n // })\n // }\n\n arr.push({\n label: _label,\n value: parseInt(results.datasets[0].data[_index])\n })\n \n });\n return arr;\n }\n\n const getColor = (_t) => {\n let ret = \"#6895c7\";\n switch (_t.label) {\n case \"iOS\": ret = \"#6895c7\"; break;\n case \"Android\": ret = \"#6082a1\"; break;\n case \"Windows\": ret = \"#b0cc98\"; break;\n case \"Mac\": ret = \"#78b283\"; break;\n case \"Linux\": ret = \"#5b8363\"; break;\n case \"iPad\": ret = \"#8cbbc4\"; break;\n case \"Unknown\": ret = \"#64a6da\"; break;\n }\n return ret;\n }\n\n\n const config = {\n appendPadding: 10,\n data: parseData(),\n angleField: 'value',\n colorField: 'label',\n color: (t) => getColor(t),\n radius: 1,\n height: 245,\n innerRadius: 0.7,\n legend: false,\n label: {\n type: 'inner',\n offset: '-50%',\n content: \"\",\n },\n statistic: {\n title: false,\n content: {\n style: {\n whiteSpace: 'pre-wrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n content: '',\n customHtml: (_container, _view, _datum, _data) => {\n return (\n <>\n <div style={{ \"opacity\": hover.opacity }}>\n <div className=\"c\"><small>{addCommas(hover.value)}</small></div>\n <div className=\"c2\" style={{ \"fontWeight\": \"normal\", \"fontSize\": \"18px\", \"opacity\": 0.7 }}><small>{hover.key}</small></div>\n </div>\n </>\n )\n }\n },\n },\n };\n\n\n\n const updateHover = (_label) => {\n\n if (!_label) {\n setHover({ ...hover, opacity: 0 });\n return;\n }\n\n let _data = parseData();\n let _find = _data.find(item => item.label === _label);\n if (_find) {\n setHover({ key: _label, value: _find.value, opacity: 1 });\n } else {\n setHover({ ...hover, opacity: 0 });\n }\n\n }\n\n\n return (\n <>\n <strong className=\"c\" style={{ \"fontSize\": \"13px\" }}>Devices</strong>\n <div style={{ \"fontSize\": \"12px\" }}><small>Distribution of website visits by device / operating system.</small></div>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <Row gutter={15}>\n <Col flex={\"220px\"}><Pie animation={null} {...config} /></Col>\n <Col flex={\"80px\"}>\n <br /><br />\n <Space size={0} direction=\"vertical\">\n <div style={{ \"cursor\": \"pointer\" }} onMouseLeave={() => updateHover(false)} onMouseEnter={() => updateHover(\"iOS\")}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#6895c7\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>iOS</small></div>\n </Space>\n </div>\n <div style={{ \"cursor\": \"pointer\" }} onMouseLeave={() => updateHover(false)} onMouseEnter={() => updateHover(\"iPad\")}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#8cbbc4\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>iPad</small></div>\n </Space>\n </div>\n <div style={{ \"cursor\": \"pointer\" }} onMouseLeave={() => updateHover(false)} onMouseEnter={() => updateHover(\"Linux\")}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#5b8363\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Linux</small></div>\n </Space>\n </div>\n <div style={{ \"cursor\": \"pointer\" }} onMouseLeave={() => updateHover(false)} onMouseEnter={() => updateHover(\"Mac\")}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#78b283\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Mac</small></div>\n </Space>\n </div>\n <div style={{ \"cursor\": \"pointer\" }} onMouseLeave={() => updateHover(false)} onMouseEnter={() => updateHover(\"Windows\")}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#b0cc98\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Windows</small></div>\n </Space>\n </div>\n <div style={{ \"cursor\": \"pointer\" }} onMouseLeave={() => updateHover(false)} onMouseEnter={() => updateHover(\"Android\")}>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#6082a1\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Android</small></div>\n </Space>\n </div>\n </Space>\n </Col>\n </Row>\n\n </>\n )\n\n\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Area } from '@ant-design/charts';\nimport { Divider, message, Space } from \"antd\";\nimport moment from \"moment-timezone\";\nimport { apiCall } from \"../../utils/Api\";\nexport default function SiteTraffic(props) {\n\n const { filters = { start_date: moment(), end_date: moment() } } = props;\n const colors = ['#64a6da', '#4fac60'];\n const [results, setResults] = useState();\n\n const fetchSiteTraffic = () => {\n let obj = {\n table: \"traffic\",\n chart_type: \"line\",\n include_keys: JSON.stringify([\"num_unique_visitors\"]),\n start_ts: filters.start_date.unix(),\n end_ts: filters.end_date.unix()\n }\n\n apiCall(\"site_analytics/get\", obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n } else {\n message.error(_result.error)\n }\n })\n }\n\n useEffect(fetchSiteTraffic, [filters]);\n\n const parseSiteTraffic = (_data = { labels: [], datasets: {} }) => {\n let arr = [];\n Object.keys(_data.datasets).map(key => {\n let name = _data.datasets[key].label;\n\n \n _data.datasets[key].data.forEach((_item, _index) => {\n arr.push({\n x: _data.labels[_index],\n y: parseInt(_item),\n z: name,\n inc: _index,\n })\n });\n })\n return arr;\n }\n\n const config = {\n data: parseSiteTraffic(results),\n xField: 'x',\n yField: 'y',\n seriesField: 'z',\n height: 250,\n legend: false,\n isStack: false,\n color: colors,\n xAxis: {\n range: [0, 1],\n },\n };\n\n return (\n <>\n <div style={{ \"float\": \"right\", \"marginRight\" : \"30px\" }}>\n <Space>\n {/* <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#64a6da\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Page views</small></div>\n </Space> */}\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#64a6da\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Unique visitors</small></div>\n </Space>\n </Space>\n </div>\n <strong className=\"c\" style={{ \"fontSize\": \"13px\" }}>Site Traffic</strong>\n <div style={{\"fontSize\" : \"12px\"}}><small>Unique visitors to your website by day.</small></div>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <Area {...config} />\n </>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Column } from '@ant-design/charts';\nimport { Divider, message, Space } from \"antd\";\nimport moment from \"moment-timezone\";\nimport { apiCall } from \"../../utils/Api\";\nexport default function Engagement(props) {\n\n const { filters = { start_date: moment(), end_date: moment() } } = props;\n\n const [results, setResults] = useState();\n\n const fetchEngagement = () => {\n let obj = {\n table: \"engagement\",\n chart_type: \"bar\",\n include_keys: JSON.stringify([\"n_0_10\", \"n_10_30\", \"n_30_60\", \"n_60_180\", \"n_180_600\", \"n_600_1800\", \"n_1800_Infinity\"]),\n start_ts: filters.start_date.unix(),\n end_ts: filters.end_date.unix()\n }\n\n apiCall(\"site_analytics/get\", obj, (_status, _result) => {\n if (_status) {\n setResults(_result);\n } else {\n message.error(_result.error)\n }\n })\n\n }\n\n useEffect(fetchEngagement, [filters]);\n\n const parseEngagement = (_data = { labels: [], datasets: [] }) => {\n\n if (_data.datasets.length < 1) {\n return [];\n }\n\n let arr = [];\n _data.datasets[0].data.forEach((_item, _index) => {\n arr.push({\n x: _data.labels[_index].replace(\"Sessions Between\", \"\").replace(\"Sessions Over\", \">\"),\n Sessions: parseInt(_item),\n inc: _index,\n })\n });\n\n return arr;\n }\n\n const config = {\n data: parseEngagement(results),\n xField: 'x',\n yField: 'Sessions',\n height: 250,\n color: \"#64a6da\",\n\n };\n\n return (\n <>\n\n <div style={{ \"float\": \"right\", \"marginRight\": \"0px\" }}>\n <Space>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": \"#64a6da\" }}></div>\n <div style={{ \"opacity\": \"0.7\" }}><small>Sessions</small></div>\n </Space>\n </Space>\n </div>\n <strong className=\"c\" style={{ \"fontSize\": \"13px\" }}>Engagement</strong>\n <div style={{ \"fontSize\": \"12px\" }}><small>Website visit duration by time segment.</small></div>\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <Column {...config} />\n\n </>\n )\n\n}","import React, { useState } from \"react\";\nimport { Layout, Card, Form, DatePicker, Row, Col, Space } from \"antd\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport moment from \"moment-timezone\";\nimport DropMenu from \"../../components/DropMenu\";\nimport UsageDevices from \"./UsageDevices\";\nimport SiteTraffic from \"./SiteTraffic\";\nimport Engagement from \"./Engagement\";\nimport SiteContent from \"./SiteContent\";\n\nexport default function SiteUsagePage() {\n\n const [filters, setFilters] = useState({\n start_date: moment().add(-60, \"days\").startOf(\"day\"),\n end_date: moment().add(-1, \"day\").endOf(\"day\"),\n })\n\n // Add an extra day to the count (startOf, endOf doesn't inc the day count)\n const range = moment(filters.end_date).endOf(\"day\").diff(moment(filters.start_date).startOf(\"day\"), \"days\") + 1;\n\n // Show yesterday, today in leau of date\n const customFormat = (value) => {\n let _diff = moment().startOf(\"day\").diff(value.startOf(\"day\"), \"days\");\n if (_diff === 1) { return \"Yesterday\"; }\n if (_diff === 1) { return \"Today\"; }\n return value.format(\"MMMD-YY ddd\");\n }\n\n // Dropdown presets (pre calculated ranges)\n const presets = [\n { label: \"1 Day\", value: 1 },\n { label: \"7 Days\", value: 7 },\n { label: \"30 Days\", value: 30 },\n { label: \"60 Days\", value: 60 },\n { label: \"90 Days\", value: 90 },\n { label: \"180 Days\", value: 180 },\n { label: \"365 Days\", value: 365 },\n { label: \"Month to date (Calendar month)\", value: moment(filters.end_date).diff(moment(filters.end_date).startOf(\"month\"), \"days\") },\n { label: \"Quarter to date (Calendar quarter)\", value: moment(filters.end_date).diff(moment(filters.end_date).startOf(\"quarter\"), \"days\") },\n { label: \"Year to date (Calendar year)\", value: moment(filters.end_date).diff(moment(filters.end_date).startOf(\"year\"), \"days\") },\n ]\n\n const setPreset = (_preset) => {\n setFilters({ ...filters, \"start_date\": moment(filters.end_date).add(-_preset.value, \"days\").startOf(\"day\") })\n }\n\n const drawFilters = () => {\n return (\n <Form layout=\"vertical\" size=\"small\">\n <Space>\n <Form.Item label={<small>Ending <span>({range.toString()} days)</span></small>}>\n <DatePicker format={customFormat} onChange={(mom) => setFilters({ ...filters, \"end_date\": mom.startOf(\"day\") })} value={moment(filters.end_date)} />\n </Form.Item>\n <Form.Item initialValue={moment(filters.start_date)} label={<small>Beginning</small>}>\n <DropMenu custom hover title={\n <DatePicker format={customFormat} onChange={(mom) => setFilters({ ...filters, \"start_date\": mom.endOf(\"day\") })} value={moment(filters.start_date)} />\n }>\n <Card style={{ \"width\": \"220px\", \"marginTop\": \"2px\" }} className=\"custom-shadow\">\n {presets.map(item => {\n return (<div onClick={() => setPreset(item)}><a><small>{item.label}</small></a></div>)\n })}\n </Card>\n </DropMenu>\n </Form.Item>\n </Space>\n </Form>\n )\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Site Usage\"\n filters={drawFilters()}\n description={<>Use this page to gain insight on your customer website traffic.</>}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <SiteTraffic filters={filters} />\n <br /><br />\n <Row gutter={30}>\n <Col flex={\"885px\"}>\n <Engagement filters={filters} />\n </Col>\n <Col flex={\"auto\"}>\n <UsageDevices filters={filters} />\n </Col>\n </Row>\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React from \"react\";\nimport { Layout, Typography, Divider } from \"antd\";\n\nexport default function UsCanPriceComparisonPage() {\n\n return (\n <>\n <Layout style={{ \"backgroundColor\": \"#fff\" }}>\n <Layout.Content style={{ \"borderLeft\": \"1px solid #eee\", \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={4}>US to Canadian Price Comparison</Typography.Title>\n <Divider />\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React from \"react\";\nimport { Layout, Typography, Divider, Table, Button, Space, DatePicker, Menu, Dropdown, Input } from \"antd\";\nimport moment from \"moment\";\n\nexport default function WebstoreOrderingPage() {\n\n\n\n const billing_reports = (\n <Menu>\n <Menu.Item key=\"1\">\n January Billing Report\n </Menu.Item>\n <Menu.Item key=\"2\">\n July Billing Report\n </Menu.Item>\n </Menu>\n );\n\n const columns = [\n\n { title: <small>Status</small>, dataIndex: 'status', key: 'status' },\n { title: <small>Action</small>, dataIndex: 'action', key: 'action' },\n {\n title: <small>Ordered</small>, dataIndex: 'ordered', key: 'ordered',\n render: (e) => {\n return moment(e * 1000).format(\"MMM Do YYYY - h:mma\");\n },\n sorter: {\n compare: (a, b) => a.ordered > b.ordered\n }\n },\n { title: <small>Qty</small>, dataIndex: 'qty', key: 'qty' },\n {\n title: <small>Value</small>, dataIndex: 'value', key: 'value',\n sorter: {\n compare: (a, b) => a.value > b.value\n },\n render: (e) => {\n return (e) ? \"$\" + e.toFixed(2) : \"\";\n },\n },\n {\n title: <small>Titles</small>, dataIndex: 'titles', key: 'titles', render: (e) => {\n return <a>{e}</a>;\n },\n },\n {\n title: <small>Ref#</small>, dataIndex: 'ref', key: 'ref', render: (e) => {\n return <a>{e}</a>;\n }\n },\n { title: <small>Cust PO#</small>, dataIndex: 'customer_po', key: 'customer_po' },\n {\n title: <small>Customer</small>, dataIndex: 'customer', key: 'customer',\n sorter: {\n compare: (a, b) => a.customer.localeCompare(b.customer)\n }\n },\n {\n title: <small>Store Notes</small>, dataIndex: 'store_notes', key: 'store_notes', render: (e) => {\n return e;\n },\n },\n {\n dataIndex: 'actions', key: 'actions', width: \"100px\", title: <small>Billing</small>, dataIndex: 'billing', key: 'billing', render: (e) => {\n return drawActions();\n }\n }\n\n ]\n\n const summary_columns = [\n { title: <small>Store</small>, dataIndex: 'store', key: 'store' },\n { title: <small>SAN</small>, dataIndex: 'san', key: 'san' },\n { title: <small>Orders</small>, dataIndex: 'orders', key: 'orders' },\n { title: <small>Customers</small>, dataIndex: 'customers', key: 'customers' },\n { title: <small>Unit Copies</small>, dataIndex: 'unit_copies', key: 'unit_copies' },\n { title: <small>Line Items</small>, dataIndex: 'line_items', key: 'line_items' },\n { title: <small>Unique ISBNs</small>, dataIndex: 'unique_isbns', key: 'unique_isbns' },\n {\n title: <small>Retail Value</small>, dataIndex: 'retail_value', key: 'retail_value',\n render: (e) => {\n return (e) ? \"$\" + e.toFixed(2) : \"\";\n },\n },\n {\n title: <small>Net for Billing</small>, dataIndex: 'net_for_billing', key: 'net_for_billing',\n render: (e) => {\n return (e) ? \"$\" + e.toFixed(2) : \"\";\n },\n },\n { title: <small>Billing</small>, dataIndex: 'billing', key: 'billing' }\n ]\n\n const summary_data = [\n\n {\n \"store\": \"Test Multi Store #0\",\n \"san\": \"TEST000\",\n \"orders\": 136,\n \"customers\": 6,\n \"unit_copies\": 158,\n \"line_items\": 150,\n \"unique_isbns\": 30,\n \"retail_value\": 3567.2,\n \"net_for_billing\": 3271.42,\n \"billing\": 0\n }\n ];\n\n\n const drawActions = () => {\n\n return (<Space><Button type=\"primary\" size=\"small\"><small>Resend</small></Button><Button type=\"primary\" size=\"small\"><small>XLS</small></Button><Button danger size=\"small\"><small>Remove</small></Button></Space>)\n }\n\n\n const tempdata = [\n {\n \"status\": \"Ordered\",\n \"action\": \"Pick-up\",\n \"ordered\": 1609683000,\n \"qty\": \"4\",\n \"value\": 23.73,\n \"titles\": \"4 Titles\",\n \"ref\": \"3895604\",\n \"customer_po\": \"\",\n \"customer\": \"Hunter, Michael\",\n \"store_notes\": \"ordered\"\n },\n\n {\n \"status\": \"Ordered\",\n \"action\": \"Pick-up\",\n \"ordered\": 1609683101,\n \"qty\": \"4\",\n \"value\": 13.73,\n \"titles\": \"4 Titles\",\n \"ref\": \"3895604\",\n \"customer_po\": \"\",\n \"customer\": \"Braun, Tobias\",\n \"store_notes\": \"ordered\",\n \"actions\": <Space><Button type=\"primary\" size=\"small\"><small>Resend</small></Button><Button type=\"primary\" size=\"small\"><small>XLS</small></Button></Space>,\n },\n\n {\n \"status\": \"Ordered\",\n \"action\": \"Pick-up\",\n \"ordered\": null,\n \"qty\": \"4\",\n \"value\": 163.73,\n \"titles\": \"4 Titles\",\n \"ref\": \"3895604\",\n \"customer_po\": \"\",\n \"customer\": \"Batchelor, Eric\",\n \"store_notes\": \"ordered\",\n \"actions\": <Space><Button type=\"primary\" size=\"small\"><small>Resend</small></Button><Button type=\"primary\" size=\"small\"><small>XLS</small></Button></Space>,\n }\n ]\n\n return (\n <>\n <Layout style={{ \"backgroundColor\": \"#fff\" }}>\n <Layout.Content style={{ \"borderLeft\": \"1px solid #eee\", \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={4}>WebStore Ordering Activity</Typography.Title>\n <Divider />\n\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Dropdown.Button type=\"primary\" overlay={billing_reports}>\n Generate PDF\n </Dropdown.Button>\n </Space>\n </div>\n <Typography.Title level={5}>Period: <DatePicker allowClear={false} format={\"MMM Do, YYYY\"} defaultValue={moment(\"January 01, 2021\")} /> to <DatePicker allowClear={false} format={\"MMM Do, YYYY\"} defaultValue={moment(\"December 31, 2021\")} /></Typography.Title>\n <Divider dashed />\n <Typography.Title level={5}>Summary:</Typography.Title>\n <Table size=\"small\" bordered pagination={false}\n columns={summary_columns}\n dataSource={summary_data}\n />\n <br />\n <Typography.Title level={5}>Activity:</Typography.Title>\n <Table expandable expandIcon={<></>} size=\"small\" bordered pagination={false}\n columns={columns}\n dataSource={tempdata}\n />\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","\nimport React from \"react\";\nimport { Card, Divider, Button, Form, Typography, Row, Col, Input, Switch, Space, message } from \"antd\";\nimport Overlay from \"../../components/Overlay\";\nimport ImageSelect from \"../../utils/ImageSelect\";\nimport { apiCall } from \"../../utils/Api\";\nimport CoverImage from \"../../components/title/CoverImage\";\nimport { cacheBuster } from \"../../utils/Utils\";\nimport { useState } from \"react\";\n\nexport default function GiftCard(props) {\n\n const { create = false, data = {}, fetchSettings = () => { }, emailed = false, disabled = false } = props;\n const { code = \"\", encrypted_code = \"\", active = false, description = \"\" } = props.data;\n const [cache, setCache] = useState(cacheBuster());\n\n\n const GiftCardEdit = (props) => {\n\n\n const [cache, setCache] = useState(cacheBuster());\n const { fetchSettings = () => { }, close = () => { } } = props;\n const { code = \"\", encrypted_code = \"\", active = false, description = \"\" } = props.data;\n const [form] = Form.useForm();\n\n\n const saveCard = (_f) => {\n\n let obj = {\n description: _f.description,\n active: _f.active\n }\n\n if(emailed){\n obj.emailed = true; \n } else {\n obj.emailed = false; \n }\n \n obj.isbn = _f.code;\n\n // if(_f.code){\n // obj.isbn = _f.code; \n // }\n\n apiCall(\"giftcard/setGiftcard\", obj, (_status, _result) => {\n if (_status) {\n message.success(\"Giftcard updated successfully.\");\n fetchSettings();\n close();\n } else {\n message.error(_result.error)\n }\n })\n\n }\n\n\n\n\n return (\n <>\n\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>{(create) ? \"Create new gift card\" : \"Edit gift card\"}</Typography.Title>\n <Divider />\n <Form form={form} onFinish={(_f) => saveCard(_f)} layout=\"vertical\">\n\n <Row gutter={30}>\n <Col span={16}>\n <Form.Item initialValue={code} label=\"Gift card ISBN (auto-generated)\" name=\"code\">\n <Input style={{ \"fontFamily\": \"monospace\" }} disabled placeholder=\"Will be automatically created.\" />\n </Form.Item>\n\n <Form.Item initialValue={description} name=\"description\" label=\"Gift card title\">\n <Input maxLength={30} showCount placeholder=\"Purple Gift Card, Emailed Card...\" />\n </Form.Item>\n </Col>\n <Col span={8}>\n\n <Form.Item initialValue={active} valuePropName=\"checked\" name=\"active\" label=\"Enable this design for purchasing?\">\n <Switch size=\"small\" />\n </Form.Item>\n\n <label>Card Image</label>\n <div>\n <CoverImage cache={cache} editing={true} eisbn={encrypted_code} isbn={code} />\n </div>\n <div><small>We recommend uploading a PNG or JPG image that is 1200px in its largest dimension. The minimum size required is 400px wide. Do not include corner rounding in the design. Changing the card image will take a few minutes to process and refresh. You may need to refresh your browser to see the changes.</small></div>\n\n {/* <ImageSelect path={\"/i/m.php?b=\" + encrypted_code} onChange={() => { }} /> */}\n <div className=\"shim\" /> <div className=\"shim\" />\n\n\n {/* <Form.Item initialValue={false} valuePropName=\"checked\" name=\"digital\" label=\"Digital?\">\n <Switch size=\"small\" />\n </Form.Item> */}\n\n </Col>\n </Row>\n <Divider />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close()}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Save</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </div>\n\n </>\n )\n }\n\n if (create) {\n return (<Overlay width={700} component={<GiftCardEdit fetchSettings={fetchSettings} data={data} />}><Button disabled={disabled} size=\"small\" type=\"primary\"><small>Add new card</small></Button></Overlay>)\n }\n\n return (\n <>\n\n <Card cover={<div className=\"bc\" style={{ \"width\": \"365px\", \"height\": \"230px\", \"backgroundRepeat\": \"no-repeat\", \"backgroundPosition\": \"center\", \"backgroundColor\": \"rgba(0,0,0,0.2)\", \"backgroundSize\": \"contain\", \"border\": \"1px solid\", \"backgroundImage\": \"url('https://bookmanager.com/i/m.php?b=\" + encrypted_code + \"&cb=\" + cache + \"')\" }}></div>}>\n <Card.Meta title={<div className=\"c\">{code} <div><small style={{ \"color\": (active) ? \"#389e0d\" : \"#888\" }}><em>{(active) ? \"Giftcard is currently active\" : \"Giftcard is currently inactive\"}</em></small></div></div>} description={<>\n <div className=\"c\">{description}</div>\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n <div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Overlay width={700} component={<GiftCardEdit fetchSettings={fetchSettings} data={data} />}><Button size=\"small\" type=\"primary\"><small>Edit Card</small></Button></Overlay>\n </div>\n </>} />\n </Card>\n </>)\n}","import React, { useEffect, useState } from \"react\";\nimport { Checkbox, Layout, Form, Row, Col, Card, Typography, Divider, Input, Space, Descriptions, Button, Switch, InputNumber, message, Tabs, Modal } from \"antd\";\nimport { EditOutlined, EllipsisOutlined, DeleteOutlined } from '@ant-design/icons';\nimport WebstoreItem from \"../../layouts/Webstore/WebstoreItem\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport GiftCard from \"./GiftCard\";\nimport { apiCall } from \"../../utils/Api\";\nimport { getSan } from \"../../utils/Utils\";\nimport { useSession } from \"../../utils/Session\";\nimport EmailPreview from \"./EmailPreview\";\n\nexport default function GiftCardsPage() {\n\n\n const [session, setSession] = useSession();\n\n const [results, setResults] = useState(\n {\n check_balance: false,\n minimum: \"0.00\",\n purchasable: false,\n emailed_message: \"\",\n emailed_label: \"\",\n\n emailed_rounded_corners: true,\n emailed_show_balance_link: true,\n emailed_show_store_name: true,\n emailed_disclaimer: \"\"\n\n }\n )\n\n const [min, setMin] = useState(results.minimum);\n const [cards, setCards] = useState([])\n\n const getNextGiftcardId = (_arr = []) => {\n\n let inc = _arr.length + 1;\n if (inc < 10) {\n inc = \"0\" + inc.toString();\n } else {\n inc = inc.toString();\n }\n if (inc > 99) {\n // too many cards...\n return \"\";\n }\n let prefix = \"GCD\";\n let san = getSan(session.corp_id, window.sitesettings.stores);\n san = san.toUpperCase();\n\n let ret = prefix + san + \"T\" + inc;\n\n return ret;\n }\n\n const [createISBN, setCreateISBN] = useState(getNextGiftcardId(results.cards));\n\n\n const fetchSettings = () => {\n apiCall(\"giftcard/getSettings\", {}, (_status, _result) => {\n if (_status) {\n setResults({\n purchasable: _result.purchasable,\n minimum: _result.minimum,\n check_balance: _result.check_balance,\n emailed_message: _result.emailed_message,\n emailed_label: _result.emailed_label,\n emailed_rounded_corners: _result.emailed_rounded_corners,\n emailed_show_balance_link: _result.emailed_show_balance_link,\n emailed_show_store_name: _result.emailed_show_store_name,\n emailed_disclaimer: _result.emailed_disclaimer,\n });\n setMin(_result.minimum)\n setCards(_result.cards)\n setCreateISBN(getNextGiftcardId(_result.cards))\n }\n })\n }\n\n useEffect(fetchSettings, []);\n\n const setSettings = (_obj) => {\n\n\n apiCall(\"giftcard/setSettings\", _obj, (_status, _result) => {\n if (_status) {\n setResults({\n purchasable: _result.purchasable,\n minimum: _result.minimum,\n check_balance: _result.check_balance,\n emailed_message: _result.emailed_message,\n emailed_label: _result.emailed_label,\n emailed_rounded_corners: _result.emailed_rounded_corners,\n emailed_show_balance_link: _result.emailed_show_balance_link,\n emailed_show_store_name: _result.emailed_show_store_name,\n emailed_disclaimer: _result.emailed_disclaimer,\n });\n message.success(\"Gift card settings updated\")\n }\n })\n }\n\n\n const drawPhysical = () => {\n return (\n <div>\n\n\n <div style={{ \"float\": \"right\" }}>\n <GiftCard fetchSettings={fetchSettings} create data={{ code: createISBN }} />\n </div>\n\n <Typography.Title level={5}>Cards</Typography.Title>\n <Divider style={{ \"marginTop\": \"5px\" }} dashed />\n\n <div className=\"gcardgrid\">\n {cards.filter(item => !item.emailed).map(item => {\n return (<GiftCard fetchSettings={fetchSettings} data={item} />)\n })}\n </div>\n </div>\n\n )\n }\n\n const [preview, setPreview] = useState(false)\n const drawEmail = () => {\n\n return (\n <Modal footer={null} title=\"Preview\" width={630} onCancel={() => setPreview(!preview)} visible={preview}>\n <EmailPreview cards={cards.filter(item => item.emailed)} results={results} />\n </Modal>\n )\n\n\n }\n\n const drawEmailed = () => {\n\n return (<>\n\n <Typography.Title level={5}>Text</Typography.Title>\n <Divider style={{ \"marginTop\": \"5px\" }} dashed />\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <div style={{ \"padding\": \"30px\", \"paddingBottom\": \"0px\" }}>\n <Row gutter={[30, 30]}>\n <Col md={24} xl={7}>\n <Typography.Title level={5}>Label</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Eg. Emailed Gift Card, E-Gift Card...</Typography.Paragraph>\n <Input placeholder=\"Card label...\" onBlur={(e) => setSettings({ ...results, \"emailed_label\": e.target.value })} defaultValue={results.emailed_label} />\n\n </Col>\n <Col md={24} xl={17}>\n <Typography.Title level={5}>Emailed Gift Card Wording</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Set the message customers will see during checkout.</Typography.Paragraph>\n <Input.TextArea onBlur={(e) => setSettings({ ...results, \"emailed_message\": e.target.value })} rows={4} defaultValue={results.emailed_message} />\n <div className=\"shim\" /><div className=\"shim\" />\n </Col>\n </Row>\n\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n </Card>\n\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div className=\"shim\" /><div className=\"shim\" />\n\n <div style={{ \"float\": \"right\" }}>\n <GiftCard disabled={(cards.filter(item => item.emailed).length > 0)} emailed fetchSettings={fetchSettings} create data={{ code: createISBN }} />\n </div>\n\n <Typography.Title level={5}>Cards</Typography.Title>\n <Divider style={{ \"marginTop\": \"5px\" }} dashed />\n\n <div className=\"gcardgrid\">\n {cards.filter(item => item.emailed).map(item => {\n return (<GiftCard results={results} fetchSettings={fetchSettings} data={item} />)\n })}\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <div style={{ \"padding\": \"30px\", \"paddingBottom\": \"0px\" }}>\n <Typography.Title level={5}>Recipient Email Setup</Typography.Title>\n <Divider style={{ \"marginTop\": \"5px\" }} dashed />\n <Row gutter={[30, 30]}>\n <Col md={24} xl={8}>\n <Space size={15} align=\"start\">\n <Switch size=\"small\" onChange={(e) => setSettings({ ...results, \"emailed_show_store_name\": e })} checked={results.emailed_show_store_name}></Switch>\n <div>\n <Typography.Title level={5}>Display store name?</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Display store name below email logo graphic. Usefull if you don't have your store name in the logo.</Typography.Paragraph>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={8}>\n <Space size={15} align=\"start\">\n <Switch size=\"small\" onChange={(e) => setSettings({ ...results, \"emailed_rounded_corners\": e })} checked={results.emailed_rounded_corners}></Switch>\n <div>\n <Typography.Title level={5}>Round corners?</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Display the gift card image with rounded corners in emails.</Typography.Paragraph>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={8}>\n <Space size={15} align=\"start\">\n <Switch size=\"small\" onChange={(e) => setSettings({ ...results, \"emailed_show_balance_link\": e })} checked={results.emailed_show_balance_link}></Switch>\n <div>\n <Typography.Title level={5}>Enable link to check balance online</Typography.Title>\n <Typography.Paragraph type=\"secondary\">You must be using the default Gift Card menu and have placed the gift card balance checker in order to enable this option. Otherwise, customers will be brought to the home page, or to a gift card page where they cannot check the balance.</Typography.Paragraph>\n </div>\n </Space>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </Col>\n </Row>\n\n <Divider dashed />\n <Row gutter={[30, 30]}>\n <Col md={24} xl={17}>\n <Typography.Title level={5}>Gift card disclaimer text</Typography.Title>\n {/* <Typography.Paragraph type=\"secondary\">...</Typography.Paragraph> */}\n <Input.TextArea onBlur={(e) => setSettings({ ...results, \"emailed_disclaimer\": e.target.value })} rows={4} defaultValue={results.emailed_disclaimer} />\n <div className=\"shim\" /><div className=\"shim\" />\n </Col>\n <Col md={24} xl={7}>\n <Typography.Title level={5}>Email Preview</Typography.Title>\n {((cards.filter(item => item.emailed).length > 0) && drawEmail())}\n\n {/* <Typography.Paragraph type=\"secondary\">...</Typography.Paragraph> */}\n <Button disabled={!(cards.filter(item => item.emailed).length > 0)} onClick={() => setPreview(!preview)} block type=\"primary\">Preview Email</Button>\n <div className=\"shim\" /><div className=\"shim\" />\n </Col>\n\n </Row>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n </Card>\n </>)\n }\n\n return (\n <>\n <Layout className=\"layout\">\n\n <LayoutHeader\n title=\"Gift Cards\"\n description=\"Use this page to manage giftcards and giftcard settings.\"\n />\n\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Settings</Typography.Title>\n <Divider style={{ \"marginTop\": \"5px\" }} dashed />\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <div style={{ \"padding\": \"30px\", \"paddingBottom\": \"0px\" }}>\n <Row gutter={[30, 30]}>\n <Col md={24} xl={7}>\n <Space size={15} align=\"start\">\n <Switch size=\"small\" onChange={(e) => setSettings({ ...results, \"purchasable\": e })} checked={results.purchasable}></Switch>\n <div>\n <Typography.Title level={5}>Enable Gift Cards</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Enable Gift Cards to be purchased online.</Typography.Paragraph>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={9}>\n <Space size={15} align=\"start\">\n <Switch size=\"small\" onChange={(e) => setSettings({ ...results, \"check_balance\": e })} checked={results.check_balance}></Switch>\n <div>\n <Typography.Title level={5}>Enable Balance Checker</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Enable a \"Check your Gift Card balance\" option on the Gift Card Purchase page. This option only works if you are using Bookmanager's gift card numbering system, and have enabled the Remote Gift Card Tracking option in your Bookmanager software.</Typography.Paragraph>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={8}>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Minimum Value</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Set the lowest value a customer can load onto a gift card. $5.00 is the most common.</Typography.Paragraph>\n <InputNumber min=\"0.00\" step=\"0.5\" stringMode onChange={(e) => setMin(e)} value={min} onBlur={(e) => setSettings({ ...results, \"minimum\": parseInt(e.target.value).toFixed(2).toString() })} precision={2} style={{ \"maxWidth\": \"100px\" }} placeholder=\"0.00\" />\n </div>\n </Space>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </Col>\n </Row>\n </div>\n </Card>\n <br />\n <Tabs defaultActiveKey=\"physical\" type=\"card\">\n <Tabs.TabPane tab=\"Physical Gift Cards\" key=\"physical\">\n {drawPhysical()}\n </Tabs.TabPane>\n {/* <Tabs.TabPane tab=\"Emailed Gift Cards\" key=\"emailed\">\n {drawEmailed()}\n </Tabs.TabPane> */}\n </Tabs>\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, { useState, useEffect } from \"react\";\nimport { Row, Col, Layout, Button, Card, Input, Checkbox, message, Modal, Tabs, Tooltip, Tag } from \"antd\";\nimport { useSession } from \"../../utils/Session\";\nimport { apiCall } from \"../../utils/Api\";\nimport { useHistory } from \"react-router-dom\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport { DeleteOutlined } from '@ant-design/icons';\nimport { QuestionCircleFilled, CaretDownOutlined, CaretUpOutlined } from '@ant-design/icons';\nexport default function PermissionPage4() {\n\n const [session, setSession] = useSession();\n const [selectedUser, setSelectedUser] = useState({ id: \"\" });\n const [selectedPermission, setSelectedPermission] = useState(\"\")\n const [results, setResults] = useState({ rows: [], permission_definitions: [] });\n const [email, setEmail] = useState(\"\");\n const history = useHistory();\n\n const [sort, setSort] = useState({ user: true, asc: true });\n\n\n const fetchPermissions = (_set = true) => {\n apiCall(\"permissions/listAll\", {}, (_status, _result) => {\n if (_status) {\n\n if (_set) {\n if (_result.rows.length > 0) {\n setSelectedUser(_result.rows[0]);\n }\n }\n setResults(_result);\n }\n });\n }\n\n useEffect(fetchPermissions, []);\n\n\n\n const drawHelp = () => {\n\n Modal.info({\n title: <>Help <p style={{ \"display\": \"inline\" }}><QuestionCircleFilled /></p></>,\n content: <>\n\n <p>Employees must first create a regular consumer account on your consumer webstore in order to be added here. On your consumer webstore, use the <strong className=\"c\">Login</strong> box’s <strong className=\"c\">Create an account</strong> button to create a customer account by email. Once that is done, log back into this area with admin access so you can add that email address.</p>\n\n <p>Select an employee from the left-hand menu, then enable or disable access to specific areas or data from the right-hand menu. Changes are saved automatically. You can also switch to a <strong className=\"c\">Permissions View</strong> using the tab, where you can assign permissions en masse to multiple staff.</p>\n\n <p><em>Note: At least one employee must have the <strong className=\"c\">Edit permissions</strong> attribute enabled. Only employees with that attribute are able to access and make changes to this area.</em></p>\n </>,\n icon: <></>\n })\n }\n\n\n\n const updatePermission = (_field, _user = selectedUser) => {\n\n\n // can't remove your own edit capability\n if (_field === \"relationships\" && session.contact.email_address === selectedUser.email) {\n Modal.error({ title: \"Error\", content: \"You can't remove your own edit permission.\" });\n return; \n }\n\n if (!_user.hasOwnProperty(\"id\")) {\n return;\n }\n\n let user_perms = { ..._user.permissions, [_field]: !_user.permissions[_field] }\n setSelectedUser({ ..._user, \"permissions\": user_perms });\n\n apiCall(\"permissions/set\", { id: _user.id, permissions: JSON.stringify(user_perms), roles: JSON.stringify(_user.roles) }, (_status, _result) => {\n if (_status) {\n fetchPermissions(false);\n } else {\n message.error(_result.error)\n }\n })\n\n }\n\n const PermissionBox = (props) => {\n\n let _checked = false;\n if (selectedUser.hasOwnProperty(\"permissions\")) {\n if (selectedUser.permissions[props.data.name]) {\n _checked = true;\n }\n }\n\n return (\n <div>\n <Checkbox onChange={(e) => updatePermission(e.target.value)} value={props.data.name} checked={_checked}>\n <Tooltip title={props.data.tooltip}>{props.data.alt_display}</Tooltip>\n </Checkbox>\n <div className=\"shim\" />\n </div>\n )\n }\n\n const UserPermission = (props) => {\n\n let _alt = props.index % 2;\n return (\n <>\n <div style={{ \"cursor\": \"pointer\" }} onClick={() => setSelectedUser(props.user)} key={props.user.id} className={(_alt) ? \"odd\" : \"even\"} >\n <Row>\n <Col flex={\"240px\"}>\n <div style={{ \"backgroundColor\": (selectedUser.id === props.user.id) ? \"#1e90ff\" : \"inherit\", \"padding\": \"3px 5px\", \"pointerEvents\": \"none\" }}><span className={(selectedUser.id === props.user.id) ? \"bw\" : \"c\"} >{props.user.name}\n  {(((session.contact.email_address !== props.user.email) && !props.user.can_delete) && <div className=\"bc bcg2\" style={{\"display\" : \"inline\", \"borderRadius\" : \"2px\", \"border\" : \"1px solid\", \"padding\" : \"0px 5px\", \"marginLeft\" : \"5px\", \"fontSize\" : \"10px\", \"lineHeight\" : \"10px\"}}>admin</div>)}\n </span></div>\n </Col>\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} flex={\"auto\"}>\n {((selectedUser.id === props.user.id && props.user.can_delete) &&\n <div style={{ \"float\": \"right\", \"marginRight\": \"2px\", \"marginTop\": \"2px\" }}>\n <Button onClick={() => removeUser(props.user.id, props.user.name)} type=\"primary\" danger size=\"small\"><small><DeleteOutlined /> Remove</small></Button>\n </div>\n )}\n <div style={{ \"backgroundColor\": (selectedUser.id === props.user.id) ? \"#1e90ff\" : \"inherit\", \"padding\": \"3px 5px\", \"pointerEvents\": \"none\" }}><span className={(selectedUser.id === props.user.id) ? \"bw\" : \"c\"} > {props.user.email}</span></div>\n </Col>\n </Row>\n </div>\n </>\n )\n }\n\n const validateEmail = (email) => {\n return String(email)\n .toLowerCase()\n .match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n );\n };\n\n\n const removeUser = (_id, _name) => {\n\n\n let confirm = Modal.confirm({\n title: \"Are you sure?\", onOk: () => {\n apiCall(\"permissions/removeUser\", { user_id: _id }, (_status, _result) => {\n if (_status) {\n setSelectedUser(\"\");\n setResults(_result);\n\n } else {\n message.error(_result.error)\n }\n })\n\n }, content: 'This will remove the employee \"' + _name + '\" from \"' + session.store_name\n })\n\n\n\n }\n\n const addUser = (_email) => {\n\n if (validateEmail(_email)) {\n\n apiCall(\"permissions/addUser\", { email: _email }, (_status, _result) => {\n if (_status) {\n\n let _added = _result.rows.find(item => item.email === email);\n let _name = \"\";\n if (_added) {\n _name = _added.name;\n }\n Modal.success({ title: \"Success\", content: \"Login permission successfully granted to: \" + _name + \".\" })\n setResults(_result);\n setSelectedUser(_result.rows.find(item => item.email === _email));\n setEmail(\"\");\n\n } else {\n message.error(_result.error)\n }\n })\n\n } else {\n Modal.error({ title: \"Invalid email\", content: \"Invalid email address provided.\" })\n }\n\n }\n\n const drawNoPermission = () => {\n\n return (\n <div className=\"bcg2\" style={{ \"width\": \"1000px\", \"margin\": \"0 auto\", \"padding\": \"20px 40px\" }}>\n\n <p className=\"bw\" style={{ \"fontSize\": \"20px\", \"lineHeight\": \"30px\" }}>Hello,</p>\n\n <p className=\"bw\" style={{ \"fontSize\": \"20px\", \"lineHeight\": \"30px\" }}>You are trying to access <strong className=\"bw\">Permissions.</strong></p>\n\n <p className=\"bw\" style={{ \"fontSize\": \"20px\", \"lineHeight\": \"30px\" }}>Sorry, but your login, {session.contact.first_name} {session.contact.last_name} with {session.store_name} does not have access to this information.</p>\n\n <p className=\"bw\" style={{ \"fontSize\": \"20px\", \"lineHeight\": \"30px\" }}>To Remedy this:<br />\n a) you may need to have your access enabled through the Setup → Permissions menu<br />\n b) this page may require a subscription (contact Bookmanager)<br />\n </p>\n\n <div onClick={() => history.push(\"/\")} style={{ \"width\": \"100%\", \"fontWeight\": \"600\", \"textAlign\": \"center\", \"fontSize\": \"20px\", \"color\": \"#fff\", \"backgroundColor\": \"#0842a0\", \"padding\": \"10px 20px\" }}>\n <span style={{ \"cursor\": \"pointer\" }}>Back to Main Page</span>\n </div>\n\n </div>\n );\n\n }\n\n\n const drawUsers = () => {\n\n if (!selectedPermission) {\n return (<></>);\n }\n\n return results.rows.sort((a, b) => {\n\n let _x = a.permissions[selectedPermission];\n let _y = b.permissions[selectedPermission];\n\n if(_x === _y){\n return a.name.localeCompare(b.name);\n } else {\n return _x? -1 : 1;\n }\n\n \n\n \n\n }).map((item, index) => {\n\n let _checked = item.permissions[selectedPermission];\n return (\n <div>\n <Checkbox onChange={() => updatePermission(selectedPermission, item)} checked={(_checked)} >{item.name}</Checkbox>\n <div className=\"shim\" />\n </div>\n )\n })\n }\n\n const drawPermissions = () => {\n return results.permission_definitions.map((item, index) => {\n return (\n <>\n <Tooltip title={item.tooltip}><div style={{ \"cursor\": \"pointer\" }} onClick={() => setSelectedPermission(item.name)} className={(index % 2) ? \"odd\" : \"even\"} >\n <div style={{ \"backgroundColor\": (selectedPermission === item.name) ? \"#1e90ff\" : \"inherit\", \"padding\": \"3px 5px\", \"pointerEvents\": \"none\" }}><span className={(selectedPermission === item.name) ? \"bw\" : \"c\"} >{item.alt_display}</span></div>\n </div>\n </Tooltip>\n </>\n )\n })\n }\n\n\n if (!session.permissions.edit) {\n drawNoPermission();\n }\n\n\n const drawSort = (_usr = false) => {\n\n return (\n <span style={{ \"position\": \"relative\", \"top\": \"-3px\" }} class=\"ant-table-column-sorter-inner\">\n <span role=\"img\" aria-label=\"caret-up\" class=\"anticon anticon-caret-up ant-table-column-sorter-up\">\n <small><CaretUpOutlined style={{\"color\" : ((sort.user ===_usr) && sort.asc) ? \"#1e90ff\" : \"#777\"}} /></small>\n </span><span role=\"img\" aria-label=\"caret-down\" class=\"anticon anticon-caret-down ant-table-column-sorter-down\">\n <small><CaretDownOutlined style={{\"color\" : ((sort.user ===_usr) && !sort.asc) ? \"#1e90ff\" : \"#777\"}} /></small>\n </span>\n </span>\n )\n }\n\n\n return (\n\n <Layout className=\"layout\">\n\n <LayoutHeader\n title=\"Permissions\"\n description={<>Add and remove employee access to this site as a whole, along with access to specific areas or sensitive information.  <QuestionCircleFilled onClick={() => drawHelp()} style={{ \"cursor\": \"pointer\" }} />\n <div className=\"shim\" /><div className=\"shim\" />\n <Input.Search onSearch={(e) => addUser(e)} onChange={(e) => setEmail(e.target.value)} value={email} style={{ \"width\": \"300px\", \"marginLeft\": \"-2px\" }} size=\"small\" placeholder=\"Add employee by email address...\" enterButton={<>Add</>}></Input.Search>\n </>}\n\n />\n\n <div style={{ \"padding\": \"20px\" }}>\n\n <Tabs size=\"small\" type=\"card\" className=\"itemTabs shiftUp\">\n <Tabs.TabPane tab={<small>Employees view</small>} key=\"employees\">\n <Card style={{ \"borderRadius\": \"0px\" }} bodyStyle={{ \"padding\": \"0px\" }}>\n <Row>\n <Col span={12}>\n <Row>\n <Col flex={\"245px\"}> <div onClick={() => setSort({ ...sort, \"user\": true, \"asc\": !sort.asc })} style={{ \"cursor\": \"pointer\" }} className=\"folders\"><small>Employee name <small> \n {drawSort(true)}\n </small></small></div></Col>\n <Col flex={\"auto\"} className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }}> <div onClick={() => setSort({ ...sort, \"user\": false, \"asc\": !sort.asc })} style={{ \"cursor\": \"pointer\" }} className=\"folders\"><small>Email <small> \n {drawSort(false)}\n </small></small></div></Col>\n </Row>\n </Col>\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} span={12}>\n <div style={{\"height\" : \"43px\"}} className=\"folders\">\n <small>{(selectedUser.hasOwnProperty(\"name\") ? selectedUser.name : \"User\")}  |  <em>Permissions</em></small>\n </div>\n </Col>\n </Row>\n <Row>\n <Col span={12}>\n <div style={{ \"padding\": \"0x\", \"paddingRight\": \"0px\" }}>\n <div style={{ \"overflowY\": \"auto\", \"maxHeight\": \"500px\", \"minHeight\": \"300px\", \"padding\": \"5px\" }}>\n {results.rows.sort((a, b) => {\n if (sort.user) {\n\n if (sort.asc) {\n return a.name.localeCompare(b.name);\n } else {\n return b.name.localeCompare(a.name);\n }\n\n } else {\n\n if (sort.asc) {\n return a.email.localeCompare(b.email);\n } else {\n return b.email.localeCompare(a.email);\n }\n\n }\n }).map((user, index) => {\n return (<UserPermission index={index} user={user} />)\n })}\n </div>\n </div>\n </Col>\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} span={12}>\n <div style={{ \"padding\": \"20px\" }}>\n {results.permission_definitions.map((item, index) => {\n return <PermissionBox data={item} />\n })}\n </div>\n </Col>\n </Row>\n </Card>\n </Tabs.TabPane>\n\n <Tabs.TabPane tab={<small>Permissions view</small>} key=\"permissions\">\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <Row>\n <Col span={12}>\n <div className=\"folders\">\n <small>Permissions</small>\n </div>\n </Col>\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} span={12}>\n <div className=\"folders\">\n <small>Employees with access</small>\n </div>\n </Col>\n </Row>\n <Row>\n <Col span={12}>\n <div style={{ \"padding\": \"0x\", \"paddingRight\": \"0px\" }}>\n <div style={{ \"overflowY\": \"auto\", \"maxHeight\": \"500px\", \"minHeight\": \"300px\", \"padding\": \"5px\" }}>\n {drawPermissions()}\n </div>\n </div>\n </Col>\n <Col className=\"bc\" style={{ \"borderLeft\": \"1px solid\" }} span={12}>\n <div style={{ \"padding\": \"20px\" }}>\n {drawUsers()}\n </div>\n </Col>\n </Row>\n </Card>\n </Tabs.TabPane>\n </Tabs>\n\n </div>\n </Layout>\n )\n\n \n}","import { Select, Form } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../utils/Api\";\n\nexport default function ISOCodes(props) {\n\n const {freeship_isocodes = []} = props; \n const [providers, setProviders] = useState([]);\n\n const parseProviders = (_arr) => {\n let _res = [];\n _arr.forEach(e => {\n e.providers.forEach(i => {\n _res.push({\n key: e.region + \"/\" + i.label,\n label: <><small>{e.region}</small> - {i.label}</>\n })\n })\n });\n return _res;\n }\n\n const fetchSettings = () => {\n apiCall(\"settings/get\", {}, (_status, _result) => {\n if (_status) {\n setProviders(parseProviders(_result[\"global:ws_multiship_json\"]));\n }\n })\n }\n\n useEffect(fetchSettings, []);\n\n return (\n\n <Form.Item initialValue={freeship_isocodes} name=\"freeship_isocodes\" label=\"Shipping Provider(s)\">\n <Select placeholder=\"Select providers...\" style={{ \"width\": \"300px\" }} mode=\"multiple\">\n {providers.map(item => {\n return <Select.Option key={item.key} value={item.key}>{item.label}</Select.Option>\n })}\n </Select>\n </Form.Item>\n\n\n\n );\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Row, Col, Form, Modal, Typography, Divider, Tag, Space, Button, Switch, Select, Input, Radio, Badge, DatePicker, message, Alert, InputNumber } from \"antd\";\nimport moment from \"moment\";\n\nimport conditional from \"../utils/conditional\";\nimport { apiCall } from \"../utils/Api\";\nimport ISOCodes from \"./ISOCodes\";\nimport { useForm } from \"antd/lib/form/Form\";\nimport { useHistory } from \"react-router-dom\";\nimport FilterPresetSelect from \"./lists/FilterPresetSelect\";\nexport default function Promo(props) {\n\n const history = useHistory();\n const [error, setError] = useState(\"\");\n const [form] = Form.useForm();\n\n const { close = () => { }, data = {}, promos, setPromos, create_new = false, promocodes = false, canFreeShip = false } = props;\n\n\n const {\n id = \"\",\n description = \"\",\n code = \"\",\n start = 0,\n end = 0,\n timezone = \"UTC\",\n automatic = true,\n use_once = false,\n use_once_per_cust = false,\n apply_to_cart = true,\n on_hand = true,\n on_order = true,\n item_limit = 0,\n min_value = 0.00,\n include_filter = {\n conditions: [],\n bisacs: [],\n bindings: [],\n lists: [],\n filter_preset: \"\"\n },\n exclude_filter = {\n conditions: [],\n bisacs: [],\n bindings: [],\n lists: []\n },\n applied_to = [],\n type = \"percentage\",\n discount = 0,\n amount = 0,\n bogo_buy = 1,\n bogo_free = 1,\n bogo_count = 1,\n freeship_isocodes = []\n } = data;\n\n const [uo, setUo] = useState(use_once);\n const [uoc, setUoc] = useState(use_once_per_cust);\n\n\n console.log(data);\n\n let m = \"a\";\n if (include_filter[\"lists\"].length > 0 || exclude_filter[\"lists\"].length > 0) {\n m = \"b\";\n }\n\n if (include_filter.hasOwnProperty(\"lists\") && include_filter[\"lists\"].length > 0 || exclude_filter[\"lists\"].length > 0) {\n m = \"b\";\n }\n\n if (include_filter.hasOwnProperty(\"filter_preset\") && (include_filter.filter_preset)) {\n m = \"c\";\n }\n\n // if (include_filter[\"conditions\"].length > 0 || include_filter[\"bisacs\"].length > 0 || include_filter[\"bindings\"].length > 0 || exclude_filter[\"conditions\"].length > 0 || exclude_filter[\"bisacs\"].length > 0 || exclude_filter[\"bindings\"].length > 0) {\n // m = \"c\";\n // }\n\n\n const [lists, setLists] = useState([]);\n const [filters, setFilters] = useState({});\n const [promoType, setPromoType] = useState(type);\n const [apply, setApply] = useState(m);\n\n\n const resetAllCustomers = () => {\n apiCall(\"promos/deleteCustomersPerPromo\", { code: data.code }, (_status, _result) => {\n if (_status) {\n message.success(\"Customers reset successfully.\");\n close();\n } else {\n message.error(_result.error)\n }\n })\n }\n\n\n\n const notifyHasCustomers = (_count = \"0\") => {\n Modal.confirm({ title: \"Warning\", onOk: () => resetAllCustomers(), okText: \"Unset all\", content: \"There are \" + _count.toString() + \" customer(s) who are using or have used this code.\" });\n }\n\n const ucfirst = (string) => {\n return (string) ? string.charAt(0).toUpperCase() + string.slice(1) : \"\";\n }\n\n\n // Fetch Filters\n const getFilters = () => {\n apiCall(\"promos/getFilterOptions\", {}, (_status, _results) => {\n if (_status) { setFilters(_results); }\n });\n }\n useEffect(getFilters, []);\n\n\n\n // Fetch Lists\n const getLists = () => {\n apiCall(\"titlelist/getLists\", {}, (_status, _results) => {\n if (_status) { setLists(_results.rows); }\n }, \"customer\");\n }\n useEffect(getLists, []);\n\n\n // Draw Lists\n const drawListSelect = () => {\n if (!(lists.length > 0)) {\n return (<></>)\n }\n return (\n <Form.Item initialValue={include_filter[\"lists\"]} label=\"Custom Lists\" name=\"list\">\n <Select\n style={{ width: '336px' }}\n placeholder=\"Select lists\"\n optionLabelProp=\"label\"\n mode=\"multiple\"\n >\n {lists.map((item, index) => {\n return (\n <Select.Option key={index} label={item.name} value={item.list_id} >\n {item.name}\n </Select.Option>\n );\n })}\n </Select>\n </Form.Item>\n )\n }\n\n\n const drawPresetSelect = () => {\n\n return (\n <Form.Item initialValue={include_filter.filter_preset} label=\"Filter Preset\" name=\"filter_preset\">\n <FilterPresetSelect width={336} />\n </Form.Item>\n )\n\n }\n\n\n const sendForm = (_f) => {\n\n\n\n setError(\"\");\n\n\n // Need One time use for item limit...\n if (!(uo || uoc)) {\n if (_f[\"item_limit\"]) {\n _f[\"item_limit\"] = 0;\n }\n\n }\n\n\n if (_f[\"code\"]) {\n _f[\"code\"] = _f[\"code\"].toUpperCase();\n }\n _f[\"automatic\"] = !promocodes;\n\n switch (_f[\"type\"]) {\n case \"dollar\":\n _f[\"discount\"] = _f[\"dollar_amount\"];\n delete _f[\"dollar_amount\"];\n break;\n case \"percentage\":\n _f[\"discount\"] = _f[\"percent_amount\"];\n delete _f[\"percent_amount\"]\n break;\n case \"bogo\":\n _f[\"bogo_buy\"] = _f[\"bogo_buy\"];\n _f[\"bogo_free\"] = _f[\"bogo_free\"];\n break;\n }\n\n\n // ship codes\n\n if (_f[\"freeship_isocodes\"]) {\n _f[\"freeship_isocodes\"] = JSON.stringify(_f[\"freeship_isocodes\"]);\n }\n\n if (_f[\"duration\"] && _f[\"duration\"][0]) {\n _f[\"start\"] = moment(_f[\"duration\"][0]).startOf(\"minute\").unix();\n } else {\n _f[\"start\"] = moment().startOf(\"minute\").unix()\n }\n\n if (_f[\"duration\"] && _f[\"duration\"][1]) {\n _f[\"end\"] = moment(_f[\"duration\"][1]).endOf(\"minute\").unix();\n } else {\n _f[\"end\"] = 0;\n }\n\n\n delete _f[\"duration\"];\n // if (_f[\"duration\"]) {\n\n // if (_f[\"duration\"][0]) {\n // _f[\"start\"] = moment(_f[\"duration\"][0]).unix();\n // }\n // if (_f[\"duration\"][1]) {\n // _f[\"end\"] = moment(_f[\"duration\"][1]).unix();\n // }\n\n // delete _f[\"duration\"];\n // }\n\n if (_f[\"include_filter\"]) { _f[\"include_filter\"] = JSON.stringify(_f[\"include_filter\"]) } else {\n _f[\"include_filter\"] = JSON.stringify({});\n }\n if (_f[\"exclude_filter\"]) { _f[\"exclude_filter\"] = JSON.stringify(_f[\"exclude_filter\"]) } else {\n _f[\"exclude_filter\"] = JSON.stringify({});\n }\n\n if (_f[\"list\"]) {\n _f[\"include_filter\"] = JSON.stringify({ \"lists\": _f[\"list\"] });\n delete _f[\"list\"];\n }\n\n if(_f[\"filter_preset\"]){\n _f[\"include_filter\"] = JSON.stringify({ \"filter_preset\": _f[\"filter_preset\"] });\n }\n\n\n if (create_new) {\n\n apiCall(\"promos/create\", _f, (_status, _results) => {\n if (_status) {\n setPromos(_results.rows);\n close();\n\n if (_results.has_customers) {\n notifyHasCustomers(_results.customer_count);\n } else {\n message.success(\"Promotion created successfully.\");\n }\n\n } else { setError(_results.error) }\n });\n\n } else {\n\n _f[\"id\"] = id;\n\n apiCall(\"promos/modify\", _f, (_status, _results) => {\n if (_status) {\n\n setPromos(_results.rows);\n close();\n\n if (_results.has_customers) {\n notifyHasCustomers(_results.customer_count);\n } else {\n message.success(\"Promotion saved successfully.\");\n }\n\n\n } else { setError(_results.error) }\n });\n }\n\n\n }\n\n const parseCodes = (_arr) => {\n return _arr.toString();\n }\n\n\n const check = (e, oh = true) => {\n\n\n if (!form.getFieldValue(on_hand) && !form.getFieldValue(on_order)) {\n if (!oh) {\n form.setFieldsValue({ \"on_hand\": true });\n } else {\n form.setFieldsValue({ \"on_order\": true });\n }\n\n }\n\n }\n\n const drawEdit = () => {\n\n\n return (\n <>\n <Form form={form} onFinish={(_f) => sendForm(_f)} layout=\"vertical\">\n <Row gutter={30}>\n <Col span={15}>\n\n <conditional.true value={(!canFreeShip)}>\n <Alert style={{ \"padding\": \"5px 15px\" }} type=\"warning\" description={<div>Free shipping promos require <a onClick={() => history.push(\"/settings/web-store-settings/shipping\")}>Multi Courier Shipping</a></div>} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n <conditional.true value={(promocodes)}>\n {/* normalize={value => (value || '').toUpperCase().replace(/\\s/g, '')} */}\n <Form.Item rules={[{ required: true, message: \"Code required.\" }]} initialValue={code} name=\"code\" label=\"Code\">\n <Input maxLength={10} placeholder=\"Code...\" style={{ \"fontFamily\": \"monospace\", \"fontWeight\": \"bold\", \"width\": \"200px\", \"textTransform\": \"uppercase\" }} />\n </Form.Item>\n </conditional.true>\n\n <Row gutter={10}>\n <Col span={11}>\n <Form.Item rules={[{ required: true, message: \"Type required.\" }]} initialValue={promoType} name=\"type\" label=\"Type\">\n <Select onChange={(e) => setPromoType(e)}>\n <Select.Option value=\"dollar\">Fixed amount</Select.Option>\n <Select.Option value=\"percentage\">Percentage</Select.Option>\n <Select.Option value=\"bogo\">BOGO Free</Select.Option>\n <Select.Option value=\"bogo_percent\">BOGO Percentage</Select.Option>\n <Select.Option disabled={(!canFreeShip)} value=\"freeship\">Free shipping</Select.Option>\n </Select>\n </Form.Item>\n </Col>\n <Col span={13}>\n <conditional.true value={(promoType === \"dollar\")}>\n <Form.Item initialValue={(discount) ? discount : 0.01} rules={[{ required: true, message: \"Dollar amount required.\" }]} name=\"dollar_amount\" label=\"Dollar amount\">\n <InputNumber min={0.01} step={0.01} precision={2} type=\"number\" prefix=\"$\" style={{ \"width\": \"100px\" }} />\n </Form.Item>\n </conditional.true>\n <conditional.true value={(promoType === \"percentage\")}>\n <Form.Item initialValue={(discount) ? discount : 1} rules={[{ required: true, message: \"Percent discount required.\" }]} name=\"percent_amount\" label=\"% off\">\n {/* <Input maxLength={6} type=\"number\" suffix=\"%\" style={{ \"width\": \"100px\" }} /> */}\n <InputNumber style={{ \"width\": \"65px\" }} min={1} max={100} maxLength={3} precision={0} />\n </Form.Item>\n </conditional.true>\n\n <conditional.true value={(promoType === \"bogo_percent\")}>\n <Space>\n <Form.Item initialValue={bogo_buy} name=\"bogo_buy\" label=\"Buy\">\n <Select>\n <Select.Option value={1}>1</Select.Option>\n <Select.Option value={2}>2</Select.Option>\n <Select.Option value={3}>3</Select.Option>\n <Select.Option value={4}>4</Select.Option>\n <Select.Option value={5}>5</Select.Option>\n <Select.Option value={6}>6</Select.Option>\n <Select.Option value={7}>7</Select.Option>\n <Select.Option value={8}>8</Select.Option>\n <Select.Option value={9}>9</Select.Option>\n </Select>\n </Form.Item>\n <div> - </div>\n <Form.Item initialValue={bogo_count} name=\"bogo_count\" label=\"Get\">\n <Select>\n <Select.Option value={1}>1</Select.Option>\n <Select.Option value={2}>2</Select.Option>\n <Select.Option value={3}>3</Select.Option>\n <Select.Option value={4}>4</Select.Option>\n <Select.Option value={5}>5</Select.Option>\n <Select.Option value={6}>6</Select.Option>\n <Select.Option value={7}>7</Select.Option>\n <Select.Option value={8}>8</Select.Option>\n <Select.Option value={9}>9</Select.Option>\n </Select>\n </Form.Item>\n <Form.Item initialValue={(discount) ? discount : 1} name=\"discount\" label=\"% off\">\n {/* <Input maxLength={6} type=\"number\" suffix=\"%\" style={{ \"width\": \"90px\" }} /> */}\n <InputNumber style={{ \"width\": \"65px\" }} min={1} max={100} maxLength={3} precision={0} />\n </Form.Item>\n </Space>\n </conditional.true>\n\n <conditional.true value={(promoType === \"bogo\")}>\n <Space>\n <Form.Item initialValue={bogo_buy} name=\"bogo_buy\" label=\"Buy\">\n <Select>\n <Select.Option value={1}>1</Select.Option>\n <Select.Option value={2}>2</Select.Option>\n <Select.Option value={3}>3</Select.Option>\n <Select.Option value={4}>4</Select.Option>\n <Select.Option value={5}>5</Select.Option>\n <Select.Option value={6}>6</Select.Option>\n <Select.Option value={7}>7</Select.Option>\n <Select.Option value={8}>8</Select.Option>\n <Select.Option value={9}>9</Select.Option>\n </Select>\n </Form.Item>\n <div> - </div>\n <Form.Item initialValue={bogo_free} name=\"bogo_free\" label=\"Get\">\n <Select>\n <Select.Option value={1}>1</Select.Option>\n <Select.Option value={2}>2</Select.Option>\n <Select.Option value={3}>3</Select.Option>\n <Select.Option value={4}>4</Select.Option>\n <Select.Option value={5}>5</Select.Option>\n <Select.Option value={6}>6</Select.Option>\n <Select.Option value={7}>7</Select.Option>\n <Select.Option value={8}>8</Select.Option>\n <Select.Option value={9}>9</Select.Option>\n </Select>\n </Form.Item>\n <div>Free</div>\n </Space>\n </conditional.true>\n </Col>\n </Row>\n <conditional.true value={(promoType === \"freeship\")}>\n\n <ISOCodes freeship_isocodes={freeship_isocodes} />\n\n\n </conditional.true>\n <Form.Item name=\"description\" style={{ \"maxWidth\": \"180px\" }} initialValue={description} rules={[{ required: true, message: \"Title required\" }]} label=\"Title\">\n <Input maxLength={20} placeholder=\"Describe promotion...\" />\n </Form.Item>\n <Form.Item initialValue={(start) ? [moment(start * 1000), (end) ? moment(end * 1000) : \"\"] : \"\"} name=\"duration\" label=\"Duration\">\n <DatePicker.RangePicker format=\"MMM Do YYYY - h:mma\" showTime />\n </Form.Item>\n <Form.Item initialValue={min_value} name=\"min_value\" label=\"Minimum spend\">\n <Input type=\"number\" prefix=\"$\" style={{ \"width\": \"100px\" }} />\n </Form.Item>\n <Form.Item label=\"Apply promotion to:\">\n <Radio.Group onChange={(e) => setApply(e.target.value)} defaultValue={apply} buttonStyle=\"solid\">\n <Radio.Button value=\"a\">All products</Radio.Button>\n <Radio.Button value=\"b\">Custom Lists</Radio.Button>\n <Radio.Button value=\"c\">Filter preset</Radio.Button>\n </Radio.Group>\n </Form.Item>\n\n <conditional.true value={(apply === \"b\")}>\n {drawListSelect()}\n </conditional.true>\n <conditional.true value={(apply === \"c\")}>\n {drawPresetSelect()}\n </conditional.true>\n\n\n </Col>\n <Col span={9}>\n <Form.Item initialValue={(on_hand) ? on_hand : (on_order) ? false : true} valuePropName=\"checked\" name=\"on_hand\" label=\"Include on hand\">\n <Switch onChange={(e) => check(e, true)} size=\"small\" />\n </Form.Item>\n <Form.Item initialValue={(on_order)} valuePropName=\"checked\" name=\"on_order\" label=\"Include on order\">\n <Switch onChange={(e) => check(e, false)} size=\"small\" />\n </Form.Item>\n {/* <Form.Item initialValue={(apply_to_cart)} valuePropName=\"checked\" name=\"apply_to_cart\" label=\"Apply to cart\">\n <Switch size=\"small\" />\n </Form.Item> */}\n <conditional.true value={(promocodes)}>\n <>\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.6\" }}>The promo code can only be used by one customer, and immediately expires upon its first use.</small>} initialValue={(use_once)} valuePropName=\"checked\" name=\"use_once\" label=\"One time use (all time)\">\n <Switch disabled={(uoc)} onChange={(e) => setUo(e)} size=\"small\" />\n </Form.Item>\n <div className=\"shim\" /><div className=\"shim\" />\n </>\n </conditional.true>\n\n <conditional.true value={(promocodes)}>\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.6\" }}>The promo code can be used by multiple customers, but limited to one use per customer. Customer must be logged in.</small>} initialValue={(use_once_per_cust)} valuePropName=\"checked\" name=\"use_once_per_cust\" label=\"One time use (per customer)\">\n <Switch disabled={(uo)} onChange={(e) => setUoc(e)} size=\"small\" />\n </Form.Item>\n <div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n\n <conditional.true value={(promocodes && promoType === \"percentage\")}>\n <div style={{ \"opacity\": (uo || uoc) ? \"1\" : \"0.6\" }}>\n <div className=\"shim\" />\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.6\" }}>The promo code can only be applied to this number of products, the most expensive of which will be discounted. A <strong>One time use</strong> option must be selected with this option. This option is only available for the <strong>Percentage</strong> type promo code.</small>} initialValue={item_limit} name=\"item_limit\" label=\"Item limit\">\n <InputNumber disabled={!(uo || uoc)} min={0} precision={0} />\n </Form.Item>\n </div>\n </conditional.true>\n\n\n </Col>\n </Row>\n\n\n\n\n\n\n\n <Divider />\n <conditional.true value={(error)}>\n <Alert type=\"error\" message=\"Error\" description={error} />\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n </conditional.true>\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => close()}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Save</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </>\n )\n }\n\n\n return (\n <div style={{ \"padding\": \"25px\" }}>\n <Typography.Title level={5}>{(create_new) ? \"Create new\" : \"Edit\"} {(promocodes) ? \"promo code\" : \"promotion\"}</Typography.Title>\n <Divider />\n {drawEdit()}\n </div>\n )\n\n}","import React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../utils/Api\";\nimport moment from \"moment\";\nimport { Button, Popconfirm, Table, Typography, Card, Divider, Space, message } from \"antd\";\nexport default function PromoManageCustomers(props) {\n\n const { close = () => { }, data = {} } = props;\n\n const [results, setResults] = useState([]);\n\n\n const fetchCustomers = () => {\n apiCall(\"promos/getCustomersPerPromo\", { code: data.code }, (_status, _result) => {\n if(_status){\n setResults(_result);\n } else {\n message.error(_result.error);\n }\n \n })\n }\n\n useEffect(fetchCustomers, []);\n\n // (10:33:31 AM) Tobias: https://tbraunapi.bookmanager.com/store/promos/getCustomersPerPromo?session_id=1Mft0NR7Fz0UNZc1tMjuEHAyS7xF&store_id=101069&code=1pc50\n // (10:33:36 AM) Tobias: https://tbraunapi.bookmanager.com/store/promos/deleteCustomersPerPromo?session_id=1Mft0NR7Fz0UNZc1tMjuEHAyS7xF&store_id=101069&code=1pc50\n\n\n const resetAllCustomers = () => {\n apiCall(\"promos/deleteCustomersPerPromo\", { code: data.code }, (_status, _result) => {\n if(_status){\n message.success(\"Customers reset successfully.\");\n close(); \n } else { \n message.error(_result.error)\n }\n })\n }\n\n\n const columns = [\n { title: <small>Customer</small>, dataIndex: 'customer_name', key: 'customer_name' },\n { title: <small>Email</small>, dataIndex: 'email', key: 'email' },\n { title: <small>Bookorder ID</small>, dataIndex: 'bookorder_id', key: 'bookorder_id' },\n {\n title: <small>Date</small>, dataIndex: 'date_ordered', key: 'date_ordered', render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do, YYYY\") : \"in cart.\";\n }\n }\n ]\n\n\n\n return (\n <div style={{ \"padding\": \"25px\" }}>\n <Typography.Title level={5}>Manage customers</Typography.Title>\n <Divider />\n \n <Table bordered className=\"bc\" style={{\"height\" : \"185px\"}} scroll={{y : 300}} size=\"small\" columns={columns} dataSource={results} />\n \n <br />\n <div style={{\"float\" : \"right\"}}>\n <Space>\n <Button onClick={() => close()}>Cancel</Button>\n <Button onClick={() => resetAllCustomers()} type=\"primary\">Unset All</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n {/* <pre>{JSON.stringify(results, null, 2)}</pre> */}\n {/* <pre>{JSON.stringify(data, null, 2)}</pre> */}\n </div>\n )\n}","import { Checkbox, message, Switch } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function EnableSetting(props) {\n\n const {\n setting_key = \"using_promo_codes\",\n label = \"\",\n callback = () => {},\n setCanFreeShip = () => {}\n } = props;\n\n const [enabled, setEnabled] = useState(false); \n\n const getSettings = () => {\n apiCall(\"settings/get\", {}, (_status, _result) => {\n if (_status) {\n \n // One off, for promo codes\n setCanFreeShip(_result[\"global:multiship_enabled\"])\n\n setEnabled(_result[setting_key]);\n callback(_result[setting_key]); \n \n } else {\n message.error(JSON.stringify(_result, null, 2))\n }\n })\n }\n\n useEffect(getSettings, []);\n\n const updateSetting = (_value) => {\n let _s = {}\n _s[setting_key] = _value;\n _s = JSON.stringify(_s);\n apiCall(\"settings/set\", { settings: _s }, (_status, _result) => {\n if (_status) {\n console.log(_result[setting_key])\n setEnabled(_result[setting_key])\n callback(_result[setting_key]); \n } else {\n message.error(_result.error)\n }\n })\n\n }\n\n return (<><Checkbox checked={enabled} onChange={(e) => updateSetting(e.target.checked)}><p>{label}</p></Checkbox></>)\n\n\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Popconfirm, Badge, Spin, Typography, Divider, Button, Table, Space, Alert } from \"antd\";\nimport Promo from \"../../components/Promo\";\nimport { EditOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport moment from \"moment\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport { useHistory } from \"react-router-dom\";\nimport Overlay from \"../../components/Overlay\";\nimport PromoManageCustomers from \"../../components/PromoManageCustomers\";\nimport EnableSetting from \"./EnableSetting\";\n\nexport default function SalesPromotionsPage(props) {\n\n const history = useHistory();\n const { promocodes = false } = props;\n const [enabled, setEnabled] = useState(false)\n const meta_title = (promocodes) ? \"Promo Codes\" : \"Sales Promotions\";\n const meta_recent = (promocodes) ? \"Promo codes\" : \"Promotions\";\n const meta_button = (promocodes) ? \"Create promo code\" : \"Create promotion\";\n\n const [canFreeShip, setCanFreeShip] = useState(false);\n\n\n const meta_description = (promocodes) ?\n <>\n\n </>\n :\n <>\n Sales Promotions are automatically applied to all customers. To avoid conflicts, only one type of Sales promotion can be applied within the specified date range.\n </>;\n\n const [promos, setPromos] = useState([]);\n const [loading, setLoading] = useState(true);\n\n\n \n\n const ucfirst = (string) => {\n return (string) ? string.charAt(0).toUpperCase() + string.slice(1) : \"\";\n }\n\n const setResults = (_results) => {\n\n if (promocodes) {\n setPromos(_results.filter(item => !item.automatic));\n } else {\n setPromos(_results.filter(item => item.automatic));\n }\n }\n\n // fetch promos\n const getPromos = () => {\n apiCall(\"promos/listAll\", {}, (_status, _results) => {\n if (_status) {\n setLoading(false);\n setResults(_results);\n }\n })\n }\n useEffect(getPromos, [promocodes]);\n\n // const delete promo\n const removePromo = (_id) => {\n apiCall(\"promos/delete\", { id: _id }, (_status, _results) => {\n if (_status) {\n setResults(_results);\n }\n })\n }\n\n const columns = [\n {\n title: \"\", dataIndex: 'edit', key: 'edit', \"width\": \"40px\", render: (e, f) => {\n return drawEditButton(f);\n }\n },\n\n {\n title: \"\", dataIndex: 'status', key: 'status', \"width\": \"5px\", render: (e, f) => {\n if (moment().unix() >= f.start && ((moment().unix() < f.end) || f.end === 0)) {\n\n if (promocodes) {\n if (!f.status) {\n return (<Badge style={{ \"paddingLeft\": \"7px\" }} status=\"success\" />);\n } else {\n return (<Badge style={{ \"paddingLeft\": \"7px\" }} status=\"default\" />);\n }\n }\n return (<Badge style={{ \"paddingLeft\": \"7px\" }} status=\"success\" />);\n } else {\n return (<Badge style={{ \"paddingLeft\": \"7px\" }} status=\"default\" />);\n }\n }\n },\n {\n title: <small>Code</small>, dataIndex: 'code', key: 'code', width: \"5px\", render: (e, f) => {\n return <div>{e}</div>;\n }\n },\n { title: <small>Title</small>, dataIndex: 'description', key: 'description' },\n {\n title: <small>Type</small>, dataIndex: 'type', key: 'type', render: (e) => {\n return (e) ? ucfirst(e) : \"\";\n }\n },\n {\n title: <small>Discount</small>, dataIndex: 'discount', key: 'discount', render: (e, f) => {\n\n switch (f.type) {\n case \"dollar\": return (e) ? \"$\" + e : \"N/A\";\n case \"percentage\": return (e) ? e + \"%\" : \"N/A\";\n case \"bogo\": return (<>Buy {f.bogo_buy}, get {f.bogo_free} free</>);\n case \"freeship\": return (\"Free Shipping\")\n default:\n break;\n }\n\n return (e) ? (f.type === \"dollar\") ? \"$\" + e : e + \"%\" : \"N/A\";\n }\n },\n {\n title: <small>Start Date</small>, dataIndex: 'start', key: 'start', render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do YYYY - h:mma\") : \"Unset\";\n }\n },\n {\n title: <small>End Date</small>, dataIndex: 'end', key: 'end', render: (e) => {\n return (e) ? moment(e * 1000).format(\"MMM Do YYYY - h:mma\") : \"Does not expire\";\n }\n },\n {\n title: <small>Customers</small>, \"width\": \"40px\", dataIndex: 'manage', key: 'manage', render: (e, f) => {\n return drawManageButton(f);\n }\n },\n {\n title: \"\", dataIndex: 'id', key: 'id', \"width\": \"40px\", render: (e,) => {\n return drawRemoveButton(e);\n }\n },\n ];\n\n const drawRemoveButton = (_id) => {\n\n\n return (\n <Popconfirm\n title=\"Are you sure?\"\n onConfirm={() => removePromo(_id)}\n okText=\"Remove\"\n okType=\"danger\"\n cancelText=\"Cancel\"\n >\n <Button danger size=\"small\"><small>Remove</small></Button>\n </Popconfirm>\n );\n }\n\n\n const drawManageButton = (_data) => {\n\n\n if (!_data.use_once_per_cust) {\n return <></>;\n }\n\n return (<Overlay width={750} component={<PromoManageCustomers data={_data} />}><Button size=\"small\"><small>Customers</small></Button></Overlay>)\n\n }\n\n\n const drawEditButton = (_data) => {\n\n return (<Overlay width={700} component={<Promo canFreeShip={canFreeShip} promocodes={promocodes} promos={promos} setPromos={setResults} data={_data} />}><Button type=\"primary\" icon={<EditOutlined />} size=\"small\" /></Overlay>)\n // return (<Promo promocodes={promocodes} promos={promos} setPromos={setResults} data={_data}><Button type=\"primary\" icon={<EditOutlined />} size=\"small\" /></Promo>)\n }\n\n\n if (loading) {\n return (<> <div style={{ \"height\": \"100vh\", \"display\": \"flex\", \"alignItems\": \"center\", \"justifyContent\": \"center\" }}><Spin size=\"large\" /></div></>);\n }\n\n\n return (\n <>\n <Layout className=\"layout\">\n\n <LayoutHeader\n title={meta_title}\n description={<>Use this page to create and manage {meta_title.toLowerCase()}.</>}\n button={\n <>\n <EnableSetting setCanFreeShip={setCanFreeShip} callback={setEnabled} label=\"Enable sales promotions & promo codes\" setting_key=\"global:using_promo_codes\" />\n </>\n }\n />\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n\n {((!enabled) && <div style={{\"padding\": \"30px\", \"paddingBottom\" : \"0px\"}}><Alert message=\"Sales promotions & promo codes are not enabled for this webstore.\" type=\"warning\" /></div>)}\n <Spin indicator={<></>} spinning={!(enabled)}>\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={5}>\n <div className=\"float-flex\">\n <div>{meta_recent}</div>\n <Overlay width={700} component={<Promo canFreeShip={canFreeShip} promocodes={promocodes} promos={promos} create_new setPromos={setResults}></Promo>}><Button size=\"small\" type=\"primary\"><small>{meta_button}</small></Button></Overlay>\n </div>\n \n </Typography.Title>\n <Typography.Paragraph type=\"secondary\">{meta_description}</Typography.Paragraph>\n <div className=\"shim\" />\n <Table size=\"small\" bordered pagination={false}\n columns={columns}\n dataSource={promos}\n />\n </div>\n </Spin>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React from \"react\";\nimport SalesPromotionsPage from \"./SalesPromotionsPage\";\n\n\nexport default function PromoCodesPage(props){\n\n return(<SalesPromotionsPage promocodes />);\n \n}","import React, { useEffect, useState } from \"react\";\nimport { Checkbox, Layout, Row, Col, Typography, Divider, Radio, Table, Space, Card, message } from \"antd\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function StoreStockSharing() {\n\n const [stores, setStores] = useState([]);\n const [init, setInit] = useState(false);\n const [loading, setLoading] = useState(true);\n\n const [settings, setSettings] = useState({\n retail_price : true,\n quantity_mode : 1,\n filter_type : 0\n });\n\n const getSettings = () => {\n apiCall(\"stock_sharing/get\", {}, (_status, _result) => {\n if (_status) {\n setSettings(_result.settings);\n setStores(_result.stores);\n setInit(true);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n useEffect(getSettings, []);\n\n const updateSettings = () => {\n if(!init){\n return false; \n }\n setLoading(true);\n apiCall(\"stock_sharing/setSettings\", settings, (_status, _result) => {\n if(_status){\n message.success(\"Setting updated\");\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n })\n }\n useEffect(updateSettings, [settings]);\n\n const updateFiltered = (_stores) => {\n let filter_ids = _stores.filter(item => item.is_filtered).map(item => item.id);\n apiCall(\"stock_sharing/setFilterIds\", {filter_ids : JSON.stringify(filter_ids)}, (_status, _result) =>{\n if(_status){\n // nothing to do here...\n } else {\n message.error(_result.error);\n }\n })\n }\n\n const toggleFiltered = (_obj) => {\n let _stores = [...stores];\n let _ind = _stores.findIndex(item => item.id === _obj.id);\n if(_ind > -1){\n // found\n _stores[_ind].is_filtered = !_stores[_ind].is_filtered; \n \n }\n setStores(_stores);\n updateFiltered(_stores);\n }\n\n const columns = [\n { title: <small>Store</small>, dataIndex: 'name', key: 'name' },\n { title: <small>Region</small>, dataIndex: 'city', key: 'city' },\n { title: <small>Province</small>, dataIndex: 'province', key: 'province' }\n ];\n\n if(settings.filter_type > 1){\n columns.unshift({ title: <small></small>, width : \"22px\", dataIndex: 'is_filtered', key: 'is_filtered', render : (e, f) => {\n return <Checkbox onChange={(_e) => toggleFiltered(f)} checked={e} />\n } })\n }\n\n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Stock Sharing\"\n description=\"Use this page configure store sharing and settings.\"\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Card loading={(loading && !init)} bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n <div style={{ \"padding\": \"30px\" }}>\n {/* Sharing filter rules */}\n <Row gutter={[30, 30]}>\n <Col md={24} xl={24}>\n <Space>\n <div>\n <Typography.Title level={5}>Sharing filter rules:</Typography.Title>\n <Typography.Paragraph type=\"secondary\"></Typography.Paragraph>\n <Radio.Group onChange={(e) => setSettings({...settings, \"filter_type\" : e.target.value})} value={settings.filter_type}>\n <Radio value={0}>Disable sharing.</Radio>\n <div className=\"shim\"></div>\n <Radio value={1}>Share with everyone who shares with me.</Radio>\n <div className=\"shim\"></div>\n <Radio value={3}>Share <strong>only with the stores I have checked.</strong></Radio>\n <div className=\"shim\"></div>\n <Radio value={2}>Share with <strong>everyone except</strong> the stores I have checked.</Radio>\n </Radio.Group>\n <div className=\"shim\"></div> <div className=\"shim\"></div>\n </div>\n </Space>\n </Col>\n <Col md={24} xl={24}>\n <Space>\n <div>\n <Typography.Title level={5}>Preferred quantity display mode:</Typography.Title>\n <Typography.Paragraph type=\"secondary\"></Typography.Paragraph>\n <Radio.Group onChange={(e) => setSettings({...settings, \"quantity_mode\" : e.target.value})} value={settings.quantity_mode}>\n <Radio value={1}>Show actual quantity</Radio>\n <div className=\"shim\"></div>\n <Radio value={2}>Show 5+ when quantity exceeds 5</Radio>\n <div className=\"shim\"></div>\n <Radio value={3}>Show \"Yes\" if quantity is at least one</Radio>\n </Radio.Group>\n <div className=\"shim\"></div>\n <Checkbox checked={settings.retail_price} onChange={(e) => setSettings({...settings, \"retail_price\" : e.target.checked})}>Show retail price</Checkbox>\n <div className=\"shim\"></div> <div className=\"shim\"></div>\n </div>\n </Space>\n </Col>\n </Row>\n </div>\n </Card>\n <div className=\"shim\"></div> <div className=\"shim\"></div><div className=\"shim\"></div> <div className=\"shim\"></div>\n <Typography.Title level={5}>These stores are sharing:</Typography.Title>\n <Table bordered size=\"small\" pagination={{defaultPageSize : 20}}\n columns={columns}\n rowKey=\"id\"\n loading={loading}\n dataSource={stores.filter(item => item.is_sharing)}\n />\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Title level={5}>These stores have not enabled sharing:</Typography.Title>\n\n <Table bordered size=\"small\" pagination={{defaultPageSize : 20}}\n columns={columns}\n rowKey=\"id\"\n loading={loading}\n dataSource={stores.filter(item => !item.is_sharing)}\n />\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Divider dashed />\n <Typography.Title level={5}>About Sharing</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n <em>These settings allow you to share your stock information with other booksellers that send inventory data to Bookmanager. Stores cannot see your information unless they have allowed you to see theirs. Once sharing is enabled, to view shared information, click the Pubstock button for a particular title and then click Stores. When you change a sharing option you must wait one hour before making further changes. This is done to deter booksellers from temporarily enabling sharing their data, which would defeat the purpose of sharing data.</em>\n </Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">\n <em>Stores that appear in grey are not currently sharing information with you (or perhaps eveyone, or they are only sharing with a few select stores).</em>\n </Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">\n <em>If you have the \"Share with everyone\" filter rule selected, the checkboxes beside each store do not affect anything. They are just there in case you later select a different filter rule.</em>\n </Typography.Paragraph>\n </div>\n </Layout.Content>\n </Layout>\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport { Form, Checkbox, Typography, Divider, Input, Button, Radio, Select, Row, Col, Space } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nimport { apiCall } from \"../../../utils/Api\";\nexport default function GeneralSection(props) {\n\n\n const [pages, setPages] = useState([]);\n const getPages = () => {\n apiCall(\"settings/getCustomPages\", {}, (_status, _results) => {\n if (_status) {\n setPages(_results);\n }\n })\n }\n\n useEffect(getPages, []);\n\n\n const drawPages = () => {\n return pages.map((item, index) => {\n return (<Select.Option key={item.id} value={item.id}>{item.name}</Select.Option>)\n })\n }\n\n const { ws, form } = props;\n\n\n const default_ws_login_required_message = \"Ordering from our site is available only to preauthorized customers. Please contact us by phone at @@phone@@ or email at @@email@@ to have us create or authorize your account.\";\n\n return (\n <>\n\n <div id=\"general\"></div>\n <div style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>General</Typography.Title>\n <Divider />\n\n {/* Private webstore */}\n <div id=\"ws_self_login_required\"></div>\n <WebstoreItem\n name=\"global:ws_self_login_required\"\n value={(ws[\"global:ws_self_login_required\"]) ? true : false}\n heading=\"Private webstore\"\n description={<div>When this box is checked, access to this site is only allowed by a site administrator or someone with the appropriate permissions. Some stores may set their site to Private when they are first customizing and configuring their Webstore until they are comfortable and ready to make it visible.</div>}\n />\n\n <Divider dashed />\n {/* Treat non-approved customers as anonymous users */}\n <div id=\"ws_use_whitelist\"></div>\n <WebstoreItem\n name=\"global:ws_use_whitelist\"\n value={(ws[\"global:ws_use_whitelist\"]) ? true : false}\n heading=\"Treat non-approved customers as anonymous users\"\n description={<div>When this box is checked, customers whom you have not approved on the customer accounts page will be given the same level of access to this webtore as those who have not created an account or logged in. This will have no effect unless other options are selected that affect anonymous users, such as hiding the cart or prices.</div>}\n />\n\n <Divider dashed />\n {/* Visible only when customer is logged in */}\n <div id=\"ws_login_required\"></div>\n <WebstoreItem\n name=\"global:ws_login_required\"\n value={(ws[\"global:ws_login_required\"]) ? true : false}\n heading=\"Visible only when customer is logged in\"\n description={<div>When this box is checked, access to this site is only granted to customers with accounts registered with Bookmanager. A \"send invitation\" option will appear in the webstore's menu bar to those with proper permissions. </div>}\n />\n\n <Divider dashed />\n {/* Visible only when customer is logged in Message */}\n <div id=\"ws_login_required_message\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Login Prompt</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This message will show up when the user is prompted to log in. You can customize it; your store’s email address and phone number will be automatically filled in for the @@phone@@ and @@email@@ placeholders. Leave it empty to use the default message.</Typography.Paragraph>\n <Form.Item initialValue={(ws[\"global:ws_login_required_message\"]) ? ws[\"global:ws_login_required_message\"] : default_ws_login_required_message} name=\"global:ws_login_required_message\" >\n <Input.TextArea showCount maxLength={300} style={{ \"maxWidth\": \"500px\" }} rows={4} >\n </Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div> <div className=\"shim\"></div>\n <Button size=\"small\" onClick={() => form.setFieldsValue({ ws_login_required_message: default_ws_login_required_message })} type=\"primary\"><small>Use default</small></Button>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Allow customers to view their lists at any Bookmanager site */}\n <div id=\"ws_allow_list_transfer\"></div>\n <WebstoreItem\n name=\"global:ws_allow_list_transfer\"\n value={(ws[\"global:ws_allow_list_transfer\"]) ? true : false}\n heading=\"Allow customers to view their lists at any Bookmanager site\"\n description={<div>When this box is unchecked, customers creating a list at your site will not see their list at another Bookmanager webstore, and likewise, lists they create at other stores will not be visible from your site. Tip: This feature is popular with librarians but booksellers might prefer to discourage shopping at other stores.</div>}\n />\n\n <Divider dashed />\n {/* Enable automatic browse redirection*/}\n <div id=\"ws_auto_browse_destination\"></div>\n <WebstoreItem\n name=\"global:ws_auto_browse_destination\"\n value={(ws[\"global:ws_auto_browse_destination\"]) ? true : false}\n heading=\"Enable automatic browse redirection\"\n description={<div>When this box is checked, you (or other staff/users with the Store login) will be forwarded to the TitleBrowser after logging in.</div>}\n />\n\n <Divider dashed />\n <div id=\"ws_default_featured_sort\"></div>\n {/* Featured Lists will be shown: */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Featured Lists will be shown:</Typography.Title>\n <Form.Item initialValue={ws[\"global:ws_default_featured_sort\"]} noStyle name=\"global:ws_default_featured_sort\">\n <Radio.Group>\n <Radio value=\"tldefsequence\">in the sequence I have chosen (custom)</Radio>\n <div className=\"shim\"></div>\n <Radio value=\"name\">in alphabetical order</Radio>\n <div className=\"shim\"></div>\n <Radio value=\"lastupdate\">in order of date last updated</Radio>\n <div className=\"shim\"></div>\n <Radio value=\"dateposted\">in order of date posted</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n <div className=\"shim\"></div>\n <Typography.Paragraph type=\"secondary\">When viewing Featured Lists, the default sort option above will be used but can be temporarily changed by the user. To create a custom sequence, you must be logged in as the store, choose \"custom\" sort, click \"Display: Brief\", then use the arrows to move lists (your customers cannot do this). The custom sort is the recommended default to ensure that the most important featured items appear first on your lists. When a new Featured list is added, it will appear at the very top.</Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n <div id=\"ws_homeurl\"></div>\n {/* Alternate home page URL */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Alternate home page URL</Typography.Title>\n <Typography.Paragraph type=\"secondary\">If you want visitors to be taken to another site when they click Home, please enter in the address in the box. Otherwise, they will simply return to the main page of your Webstore.</Typography.Paragraph>\n <Form.Item name=\"global:ws_homeurl\" rules={[{ type: \"url\", message: \"Must be a valid url.\" }]} initialValue={ws[\"global:ws_homeurl\"]} >\n <Input style={{ \"maxWidth\": \"500px\" }} placeholder=\"https://example.com/\" />\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n <div id=\"ws_landing\"></div>\n {/* Landing page URL*/}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Landing page URL</Typography.Title>\n <Typography.Paragraph type=\"secondary\">If you want visitors to be taken to another page when they initially navigate to your front page, enter the address in the box. Otherwise they will simply land on the front page of your Webstore.</Typography.Paragraph>\n <Form.Item name=\"global:ws_landing\" rules={[{ type: \"url\", message: \"Must be a valid url.\" }]} initialValue={ws[\"global:ws_landing\"]} >\n <Input style={{ \"maxWidth\": \"500px\" }} placeholder=\"https://example.com/\" />\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_landing_logged_out\"]) ? true : false} name=\"global:ws_landing_logged_out\" noStyle>\n <Checkbox>Only redirect users who are <strong>not</strong> logged in</Checkbox>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {(window.sitesettings.is_v3 && <>\n {/* Terms & Conditions Toggle */}\n <div id=\"ws_terms_consent_enabled\"></div>\n <WebstoreItem\n name=\"global:ws_terms_consent_enabled\"\n value={(ws[\"global:ws_terms_consent_enabled\"]) ? true : false}\n heading=\"Enable Terms & Conditions\"\n description={<div>Enable this to add a mandatory \"I agree to the Terms & Conditions\" checkbox during new account creation, editing existing account information, account based checkout, quote checkout, and guest checkout. Customers must check that option in order to proceed with creating/editing an account or checking out. \"Terms & Conditions\" will be a link to the Terms & Conditions Menu. <br /><br />Refer to your local customer data collection and use disclosure laws to ensure your Terms & Conditions page meets those requirements. Date-stamped customer consent records will be saved and available for audit should you require it.</div>}\n />\n <Divider dashed />\n </>)}\n\n {(!window.sitesettings.is_v3 && <>\n <div id=\"ws_policy_page\"></div>\n {/* Terms & Conditions Page */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Privacy Policy Page</Typography.Title>\n <Typography.Paragraph type=\"secondary\">If you have a Privacy Policy page, you can link to it in your page footer here.</Typography.Paragraph>\n <Form.Item name=\"global:ws_policy_page\" initialValue={ws[\"global:ws_policy_page\"]}>\n <Select dropdownMatchSelectWidth={false} >\n <Select.Option key=\"\" value=\"\">- Use standard page -</Select.Option>\n {drawPages()}\n </Select>\n </Form.Item>\n </div>\n </Space>\n <Divider dashed />\n </>)}\n\n {(!window.sitesettings.is_v3 && <>\n\n <div id=\"ws_custom_contact_page\"></div>\n {/* Contact Us Page */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Contact Us Page</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Choose whether to use the standard Contact Us page, or one of your custom pages.</Typography.Paragraph>\n <Form.Item name=\"global:ws_custom_contact_page\" initialValue={ws[\"global:ws_custom_contact_page\"]}>\n <Select dropdownMatchSelectWidth={false}>\n <Select.Option key=\"\" value=\"\">- Use standard page -</Select.Option>\n {drawPages()}\n </Select>\n </Form.Item>\n </div>\n </Space>\n <Divider dashed />\n </>)}\n\n\n <div id=\"ws_hide_footer_address\"></div>\n {/* Street address In footer: ws_hide_footer_address */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Street address In footer:</Typography.Title>\n <Form.Item initialValue={(ws[\"global:ws_hide_footer_address\"]) ? true : false} noStyle name=\"global:ws_hide_footer_address\">\n <Radio.Group>\n <Radio value={false}>Show</Radio>\n <div className=\"shim\"></div>\n <Radio value={true}>Hide</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n <Typography.Paragraph type=\"secondary\">You may wish to hide the street address if you have multiple store locations.</Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n <div id=\"ws_facebookurl\"></div>\n {/* Social media */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n {/* Social media */}\n <Typography.Title level={5}>Social media</Typography.Title>\n <Typography.Paragraph type=\"secondary\">If you have any social media pages for your store you may enter the relative information in the boxes and an icon/link will appear down below in the footer of your Webstore.</Typography.Paragraph>\n {/* <Form layout=\"vertical\"> */}\n <label>Facebook URL</label>\n <Form.Item rules={[{ type: \"url\", message: \"Must be a valid url.\" }]} name=\"global:ws_facebookurl\" initialValue={ws[\"global:ws_facebookurl\"]} label=\"\">\n <Input style={{ \"maxWidth\": \"500px\" }} placeholder=\"https://facebook.com/\" />\n </Form.Item>\n <label>X (Twitter) Id</label>\n <Form.Item help={<small className=\"c\">Max 20 characters</small>} name=\"global:ws_twitter_username\" initialValue={ws[\"global:ws_twitter_username\"]} label=\"\">\n <Input maxLength={20} style={{ \"maxWidth\": \"500px\" }} placeholder=\"Twitter id\" />\n </Form.Item>\n <label>Instagram Id</label>\n <Form.Item help={<small className=\"c\">Max 30 characters</small>} name=\"global:ws_instagram_username\" initialValue={ws[\"global:ws_instagram_username\"]} label=\"\">\n <Input maxLength={30} style={{ \"maxWidth\": \"500px\" }} placeholder=\"Instagram id\" />\n </Form.Item>\n <label>Tiktok URL</label>\n <Form.Item rules={[{ type: \"url\", message: \"Must be a valid url.\" }]} name=\"global:ws_tiktok_url\" initialValue={ws[\"global:ws_tiktok_url\"]} label=\"\">\n <Input style={{ \"maxWidth\": \"500px\" }} placeholder=\"https://tiktok.com/\" />\n </Form.Item>\n {/* </Form> */}\n </div>\n </Space>\n\n <div id=\"ws_social_media_facebook_shareable\"></div> \n <Divider dashed />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Event sharing control</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Determine on behalf of your customers which social media platforms are authorized for sharing events. </Typography.Paragraph>\n <Space direction=\"vertical\" >\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_social_media_facebook_shareable\"]) ? true : false} name=\"global:ws_social_media_facebook_shareable\" noStyle>\n <Checkbox>Facebook</Checkbox>\n </Form.Item>\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_social_media_twitter_shareable\"]) ? true : false} name=\"global:ws_social_media_twitter_shareable\" noStyle>\n <Checkbox>X (Twitter)</Checkbox>\n </Form.Item>\n </Space>\n </div>\n </Space>\n\n <Divider dashed />\n <div id=\"ws_libro_bookstore_name\"></div>\n {/* Libro.fm Audiobook Integration */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Libro.fm Audiobook Integration</Typography.Title>\n <Typography.Paragraph type=\"secondary\">If you have registered as an audiobook retailer with Libro.fm, you can allow customers browsing your webstore the option to purchase Libro.fm audiobooks when they are available for a title. Audiobook purchases will be completed on the Libro.fm website, but your store will earn commision based on those sales.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">Enter your store's Libro.fm Storefront URL name in the field below to enable the integration.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\"><strong>NOTE:</strong> Do not type your bookstore's full name in this field. Your Libro.fm <strong>Storefront URL</strong> name is what is required. For example, Mosaic Books' Libro.fm Storefront URL is https://libro.fm/mosaicbooks, so the Storefront URL name is the last bit, <strong>mosaicbooks</strong> (all one word). This URL can be found by logging into your Libro.fm account, clicking the Gear icon near the Bookseller Hub menu item at the top, then by clicking the Store Info link from the left menu.</Typography.Paragraph>\n <Form.Item name=\"global:ws_libro_bookstore_name\" initialValue={ws[\"global:ws_libro_bookstore_name\"]} noStyle>\n <Input maxLength={30} style={{ \"maxWidth\": \"500px\" }} placeholder=\"Libro.fm store name\" />\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Treat non-approved customers as anonymous users */}\n <div id=\"ws_display_carton_quantity\"></div>\n <WebstoreItem\n name=\"global:ws_display_carton_quantity\"\n value={(ws[\"global:ws_display_carton_quantity\"]) ? true : false}\n heading=\"Display carton quantity below Add to Cart\"\n description={<div>By default, if a title has a carton quantity from the publisher, that will be displayed under the title's Details tab. Enable this option if you would like to feature the carton quantity more predominantly, within the Add to Cart area.</div>}\n />\n\n <Divider dashed />\n {/* Show libro FM link on details screen. */}\n <div id=\"ws_prominent_librofm\"></div>\n <WebstoreItem\n name=\"global:ws_prominent_librofm\"\n value={(ws[\"global:ws_prominent_librofm\"]) ? true : false}\n heading=\"Show libro FM link on details screen.\"\n description={<div>Enabling will show the libro FM link on the details screen for titles. Otherwise the libro FM link will be displayed with the title's bindings. </div>}\n />\n\n <Divider dashed />\n {/* Open titles in new Bookmanager */}\n <div id=\"bm_use_biz_url\"></div>\n <WebstoreItem\n name=\"global:bm_use_biz_url\"\n value={(ws[\"global:bm_use_biz_url\"]) ? true : false}\n heading=\"View on Webstore sends to Biz\"\n description={<div>Enabling will display titles on the new Biz website when pressing <code>W</code> in Bookmanager. Disabled, pressing <code>W</code> will load the old admin website.</div>}\n />\n\n <Divider dashed />\n <div style={{ \"opacity\": (window.sitesettings.is_canadian) ? \"1\" : \"0.2\", \"pointerEvents\": (window.sitesettings.is_canadian) ? \"inherit\" : \"none\" }}>\n {/* Display Government of Canada funding acknowledgement */}\n <div id=\"ws_government_of_canada_logo_enabled\"></div>\n <WebstoreItem\n name=\"global:ws_government_of_canada_logo_enabled\"\n value={(ws[\"global:ws_government_of_canada_logo_enabled\"]) ? true : false}\n heading=\"Display Government of Canada funding acknowledgement\"\n description={<div>Displays a small acknowledgement with the Government of Canada logo in your consumer site's footer.\n <br /><div className=\"shim\" />\n <Typography.Text>\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_government_of_canada_bilingual\"]) ? true : false} name=\"global:ws_government_of_canada_bilingual\" noStyle>\n <Checkbox />\n </Form.Item> Display Bilingual?</Typography.Text>\n <br /><br />\n </div>}\n />\n </div>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </>\n )\n}","import React from \"react\";\nimport { Form, Typography, Divider, Input, Button, Row, Col, Space } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nexport default function AccountsSection(props) {\n\n const { ws, form } = props;\n const default_ws_custom_welcome_msg = \"Your account has been created using (USER'S EMAIL ADDRESS). The upper right corner of our site will now indicate that you are logged in and ready to go.\";\n\n return (\n <>\n <div id=\"accounts\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Accounts</Typography.Title>\n <Divider />\n\n <div id=\"ws_email_auth\" />\n {/* Require email verification from new users when they create a new account */}\n <WebstoreItem\n name=\"global:ws_email_auth\"\n value={(ws[\"global:ws_email_auth\"]) ? true : false}\n heading=\"Email verification\"\n description={<div>Require email verification from new users when they create a new account</div>}\n />\n \n <Divider dashed />\n {/* Recieve notification email with the new user's details upon the creation of an account */}\n <div id=\"ws_new_acct_notify\" />\n <WebstoreItem\n name=\"global:ws_new_acct_notify\"\n value={(ws[\"global:ws_new_acct_notify\"]) ? true : false}\n heading=\"Email notification\"\n warning={true}\n description={<div>Recieve notification email with the new user's details upon the creation of an account</div>}\n />\n\n <Divider dashed />\n {/* Custom required fields in account creation form */}\n <div id=\"ws_new_acct_inputs\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Custom required fields in account creation form</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Every line will be added as an input field when prospective customers create an account on your site.</Typography.Paragraph>\n <Form.Item initialValue={ws[\"global:ws_new_acct_inputs\"]} name=\"global:ws_new_acct_inputs\" noStyle>\n <Input.TextArea maxLength={300} showCount style={{ \"maxWidth\": \"500px\" }} rows={4} >\n </Input.TextArea>\n </Form.Item>\n </div>\n </Space>\n <Divider dashed />\n {/* Override welcome message */}\n <div id=\"ws_custom_welcome_msg\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Override welcome message</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Customize the welcome message a new user receives upon creating an account, or leave empty to use the default message.</Typography.Paragraph>\n <Form.Item initialValue={(ws[\"global:ws_custom_welcome_msg\"]) ? ws[\"global:ws_custom_welcome_msg\"] : default_ws_custom_welcome_msg} name=\"global:ws_custom_welcome_msg\" noStyle>\n <Input.TextArea maxLength={300} showCount style={{ \"maxWidth\": \"500px\" }} rows={4} placeholder=\"\"></Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Button size=\"small\" onClick={() => form.setFieldsValue({ ws_custom_welcome_msg: default_ws_custom_welcome_msg })} type=\"primary\"><small>Use default</small></Button>\n </div>\n </Space>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </>\n )\n}","import { Card } from \"antd\";\nimport React from \"react\";\n\nexport default function MSWrap(props) {\n\n const { stores = [], padding = 22 } = props;\n\n if (stores.length > 1) {\n return (\n <Card bodyStyle={{\"padding\" : padding + \"px\"}} className=\"bcg3\">\n {props.children}\n </Card>\n )\n } else {\n return props.children;\n }\n\n}","import React from \"react\";\nimport { Form, Switch, Typography, Space } from \"antd\";\nimport conditional from \"../../utils/conditional\";\nexport default function MultistoreItem(props) {\n\n\n const {\n stores = [],\n ws = [],\n has_switch = true,\n disabled = false,\n disabledMsg = \"\",\n heading = \"\",\n description = \"\",\n value = false,\n name = \"\",\n warning = false,\n notice = \"\",\n onChange = null,\n } = props;\n\n\n const setOnChange = (e, _name = \"\") => {\n\n if (onChange) {\n props.onChange(e, _name);\n }\n\n }\n\n return (\n <>\n <Space align=\"start\" size={15}>\n <div>\n <conditional.true value={(stores.length > 1)}>\n <Typography.Title level={5}> </Typography.Title>\n </conditional.true>\n {stores.map(item => {\n let _name = \"ms\" + item.store_number + \":\" + name;\n return (\n <div style={{ \"height\": \"24px\", \"overflow\": \"hidden\" }}>\n <Form.Item valuePropName='checked' initialValue={ws[_name]} name={_name} noStyle>\n {(has_switch && <Switch disabled={disabled} onChange={(e) => setOnChange(e, _name)} size=\"small\" />)}\n </Form.Item>\n </div>\n )\n })}\n </div>\n {(!has_switch && <div style={{ \"width\": \"28px\" }}> </div>)}\n <div>\n <Typography.Title level={5}>{heading}</Typography.Title>\n <conditional.true value={(stores.length > 1)}>\n {stores.map(item => {\n return (<div style={{ \"height\": \"24px\", \"overflow\": \"hidden\", \"lineHeight\": \"27px\" }}>{item.altname}</div>)\n })}\n <div className=\"shim\" /><div className=\"shim\" />\n </conditional.true>\n \n <conditional.true value={(disabled && disabledMsg)}>\n <Typography.Paragraph type=\"danger\">{disabledMsg}</Typography.Paragraph>\n </conditional.true>\n <Typography.Paragraph type=\"secondary\">\n <conditional.true value={(notice)}>\n <Typography.Paragraph type={(warning) ? \"danger\" : \"secondary\"} ><em><strong>{notice}</strong></em></Typography.Paragraph>\n </conditional.true>\n {description}</Typography.Paragraph>\n </div>\n </Space>\n </>\n )\n\n}","import React, { useState } from \"react\";\nimport { Form, Typography, Divider, Input, Button, Row, Col, Space, Radio, Alert, Checkbox, Tabs, Card, message } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nimport { apiCall } from \"../../../utils/Api\";\nimport conditional from \"../../../utils/conditional\";\nimport { useSession } from \"../../../utils/Session\";\nimport Editor from \"react-medium-editor/dist/editor\";\nimport MSWrap from \"./MSWrap\";\nimport { drawMSFooter, drawMSTitleBar } from \"../../../utils/Utils\";\nimport MultistoreItem from \"../MultistoreItem\";\nexport default function OrderingSection(props) {\n\n const { ws, form, setChanged = () => { } } = props;\n const default_ws_message_pickup = \"We will contact you during normal business hours to confirm availability, final pricing, taxes or shipping charges (if applicable). We can be reached by phone at @@phone@@ or by email at @@email@@ should you have any questions or concerns.\";\n const [session, setSession] = useSession();\n const [loading, setLoading] = useState(false);\n\n\n const primary = (window.sitesettings.stores[0]);\n const stores = (primary.is_primary) ? window.sitesettings.stores : [window.sitesettings.stores.find(item => item.is_primary)];\n\n\n const convertOO = () => {\n let _ret = {}\n stores.forEach(item => {\n _ret[\"ms\" + item.store_number + \":enable_online_ordering\"] = (ws[`ms${item.store_number}:enable_online_ordering`]) ? true : false\n });\n return _ret;\n }\n\n const [enableOO, setEnableOO] = useState(convertOO());\n\n\n const [messageHTML, setMessageHTML] = useState(ws[\"global:ws_message_checkout\"]);\n const verifyEmail = (_prefix) => {\n apiCall(\"settings/verifyEmail\", { email: form.getFieldValue(_prefix + \":order_email\") }, (_status, _results) => {\n if (_status) {\n message.success(\"Email is verified\");\n } else {\n message.error(_results.error)\n }\n })\n }\n\n const checkPreference = () => {\n\n let one_selected = false;\n\n if (form.getFieldValue([\"allowed_comm_prefs\", \"email\"])) {\n one_selected = true;\n }\n if (form.getFieldValue([\"allowed_comm_prefs\", \"phone\"])) {\n one_selected = true;\n }\n if (form.getFieldValue([\"allowed_comm_prefs\", \"text\"])) {\n one_selected = true;\n }\n\n if (!one_selected) {\n form.setFieldsValue({ [\"allowed_comm_prefs\"]: { email: true, phone: false, text: false } });\n }\n\n\n }\n\n return (\n <>\n <div id=\"ordering\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Ordering</Typography.Title>\n <Divider />\n\n <div id=\"enable_online_ordering\" />\n <MultistoreItem\n onChange={(e, _name) => setEnableOO({ ...enableOO, [_name]: e })}\n stores={stores}\n ws={ws}\n name=\"enable_online_ordering\"\n heading=\"Enable online ordering\"\n description={<div>Checking this box provides your customers with an online cart to build and submit orders. If you do not check this box, they will still be able to browse and search titles, but they will have to contact you directly to place an order.</div>}\n />\n\n <div id=\"order_email\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Orders email address</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This email address should be continually monitored for incoming orders.</Typography.Paragraph>\n\n {stores.map((item, index) => {\n return (\n <>\n <conditional.true value={(stores.length > 1)}>\n <div style={{ \"height\": \"24px\", \"overflow\": \"hidden\", \"lineHeight\": \"27px\" }}>{item.name}</div>\n </conditional.true>\n <conditional.true value={(!enableOO[\"ms\" + item.store_number + \":enable_online_ordering\"])}>\n <Typography.Paragraph type=\"danger\">\"Enable online ordering\" must be enabled</Typography.Paragraph>\n </conditional.true>\n <Form.Item rules={[{ required: (enableOO[\"ms\" + item.store_number]), type: \"email\", message: \"Must be a valid email.\" }]} initialValue={ws[`ms${item.store_number}:order_email`]} name={`ms${item.store_number}:order_email`}>\n <Input disabled={(!enableOO[\"ms\" + item.store_number + \":enable_online_ordering\"])} type=\"email\" style={{ \"maxWidth\": \"500px\" }} suffix={<Button disabled={(!enableOO[\"ms\" + item.store_number + \":enable_online_ordering\"])} loading={loading} onClick={() => verifyEmail(`ms${item.store_number}`)} type=\"primary\">Verify Email</Button>} enterButton=\"Verify email\" placeholder=\"name@email.com\" />\n </Form.Item>\n </>\n )\n })}\n\n </div>\n </Space>\n <Divider dashed />\n\n {/* Allow Guest Checkout */}\n <div id=\"ws_guest_checkout\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_guest_checkout\"\n heading=\"Allow Guest Checkout\"\n description={<div>Provides your customers a Guest Checkout option at the cart. Guest Checkout is faster than regular Account Creation checkout, as customers do not need to create a full account with address details to proceed. Guest Checkout can only be used on carts where all items are in stock. <br /><br />Guest Checkout is not available for carts that contains titles that need to be ordered, or if the customer would like their order shipped / locally delivered. Depending on your Payment settings, customers can choose to pay at pick up or prepay their Guest order. Gift Cards can be used with Guest Checkout, but certain promo codes require a regular account (they must be logged in) to qualify.</div>}\n />\n <Divider dashed />\n\n\n {/* Delivery Pickup Enabled */}\n <div id=\"ws_delivery_pickup_enabled\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_delivery_pickup_enabled\"\n heading=\"Allow in-Store pick up\"\n description={<div>Upon checkout, customers can choose to pick up their order at your physical store location rather than have it shipped. We highly recommend checking this option, as the vast majority of online orders come from locals who are more than happy to pick their order up to avoid shipping costs or shipping delays. If you are a store with multiple locations, use the Multi-Store menu to customize and specify pickup locations and details.</div>}\n />\n <Divider dashed />\n\n\n {/* Allow Quote Checkout */}\n <div id=\"ws_quotes_enabled\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_quotes_enabled\"\n heading=\"Allow Quote Checkout\"\n description={<div>When enabled, customers can choose \"Request a Quote\" upon checkout. This checkout option will not require payment, but will generate a \"Quote\" type held sale in the Bookmanager software if the Webstore option \"Submitted orders will automatically generate a Held Sale in my Bookmanager system\" has been enabled.</div>}\n />\n <Divider dashed />\n\n\n\n <Divider dashed />\n {/* Available to Order wording: */}\n <div id=\"ws_order_wording\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Available to Order wording:</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Choose the wording shown for titles that you do not have in stock and will order for the customer.</Typography.Paragraph>\n <Form.Item initialValue={(ws[\"global:ws_order_wording\"]) ? true : false} noStyle name=\"global:ws_order_wording\">\n <Radio.Group>\n <Radio value={false}>special order</Radio>\n <div className=\"shim\"></div>\n <Radio value={true}>available to order</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Enable cart abandonment reminder email */}\n <div id=\"ws_cart_abandonment_email_enabled\" />\n <WebstoreItem\n name=\"global:ws_cart_abandonment_email_enabled\"\n value={(ws[\"global:ws_cart_abandonment_email_enabled\"]) ? true : false}\n heading=\"Enable cart abandonment reminder email\"\n description={<div>If you check this box, an automated email will be sent to your customers who did not complete their cart checkout. The reminder email will contain a quick link for your customer to complete their purchase. (The email will come from your store, and only one email reminder per cart will ever be sent.)</div>}\n />\n\n <Divider dashed />\n {/* Display estimated delivery date on special orders */}\n <div id=\"ws_show_estimated_delivery\" />\n <WebstoreItem\n name=\"global:ws_show_estimated_delivery\"\n value={(ws[\"global:ws_show_estimated_delivery\"]) ? true : false}\n heading=\"Display estimated delivery date on special orders\"\n description={<div>If this option is enabled, customers will be able to see an estimated time frame (in days) on special orders. The time frame should estimate the time between when an order is placed by the customer, and when they can pick it up in store. <br /> <br />This time frame is specified on a per vendor basis, and is set by you under the <strong>Vendor ETAs</strong> section. This setting does not include or factor in the additional time it takes to ship an order direct to a customer's address (those are specified under the <strong>Shipping</strong> section). The time frame estimate will display below the price of a title, in the following format: \"About XX days for in-store pick up.\"</div>}\n />\n\n <Divider dashed />\n {/* Submitted orders will auto generate a Held Sale in Bookmanager */}\n <div id=\"spool_order_files\" />\n <WebstoreItem\n onChange={(e) => props.setAutoHeldSale(e)}\n name=\"global:spool_order_files\"\n value={(ws[\"global:spool_order_files\"]) ? true : false}\n heading=\"Submitted orders will auto generate a Held Sale in Bookmanager\"\n description={<div>If this box is not checked, you will only receive an email notification that a new customer order has been submitted.</div>}\n />\n\n <Divider dashed />\n {/* Adjust online On Hand quantities when orders are placed by customers */}\n <div id=\"ws_adjust_onhand_with_orders\" />\n <WebstoreItem\n name=\"global:ws_adjust_onhand_with_orders\"\n value={(ws[\"global:ws_adjust_onhand_with_orders\"]) ? true : false}\n // notice=\"Note: If you are using a version of Bookmanager that supports real-time updates of your webstore, leave this setting unchecked.\"\n heading=\"Adjust online On Hand quantities when orders are placed by customers\"\n description={<div>If this option is checked, the onhand quantity for a title will be reduced by the quantity ordered when orders are placed. The onhand quantity will not become negative after a reduction, in such case it will remain zero. On order quantity is unaffected.</div>}\n />\n <Divider dashed />\n\n {/* My Pubstock suppliers must have stock on hand (or NYR) to be considered a source of supply. */}\n <div id=\"ws_no_cart_unless_onhand\" />\n <WebstoreItem\n name=\"global:ws_no_cart_unless_onhand\"\n value={(ws[\"global:ws_no_cart_unless_onhand\"]) ? true : false}\n heading=\"My Pubstock suppliers must have stock on hand (or NYR) to be considered a source of supply.\"\n description={<div>The cart is hidden for special orders when none of your suppliers have stock (except for NYR titles). This is to discourage ordering titles that your suppliers cannot immediately supply.</div>}\n />\n\n <Divider dashed />\n {/* Hide customer cart for ISBNs that are Out Of Stock (OS) or Out of Stock Indefinitely (OSI), except when you have it on On Hand or On Order. */}\n <div id=\"ws_no_cart_osi\" />\n <WebstoreItem\n name=\"global:ws_no_cart_osi\"\n value={(ws[\"global:ws_no_cart_osi\"]) ? true : false}\n heading=\"Hide customer cart for ISBNs that are Out Of Stock (OS) or Out of Stock Indefinitely (OSI), except when you have it on On Hand or On Order.\"\n description={<div>If you check this box, your customers will not be able to order any titles that have been designated by a publisher or vendor as OS or OSI status. However, if you currently stock the item and/or have it On Order, the customer cart will still appear for that item allowing them to order it.</div>}\n />\n <Divider dashed />\n\n {/* Do not remove ISBNs that are Out Of Stock, Out Of Stock Indefinitely, or Out Of Print from a customer's cart */}\n <div id=\"ws_allow_order_osi\" />\n <WebstoreItem\n name=\"global:ws_allow_order_osi\"\n value={(ws[\"global:ws_allow_order_osi\"]) ? true : false}\n heading=\"Do not remove ISBNs that are Out Of Stock, Out Of Stock Indefinitely, or Out Of Print from a customer's cart\"\n description={<div>If you check this box, your customers will be able to order items that you currently do not have and may not be able to get.</div>}\n />\n\n <Divider dashed />\n {/* Street address In footer: */}\n <div id=\"ws_hide_cart_price_if_anon\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>When a customer is not logged in:</Typography.Title>\n <div className=\"shim\"></div> <div className=\"shim\"></div>\n <Form.Item initialValue={ws[\"global:ws_hide_cart_price_if_anon\"]} noStyle name=\"global:ws_hide_cart_price_if_anon\">\n <Radio.Group>\n <Radio value={0}>Show both cart and prices <br /><Typography.Paragraph type=\"secondary\">If selected, customers will be able to see cart and prices even if not logged in</Typography.Paragraph></Radio>\n <div className=\"shim\"></div>\n <Radio value={1}>Hide cart and show prices <br /><Typography.Paragraph type=\"secondary\">If selected, customers will be required to log in before they can see the cart</Typography.Paragraph></Radio>\n <div className=\"shim\"></div>\n <Radio value={2}>Hide both cart and prices <br /><Typography.Paragraph type=\"secondary\">If selected, customers will be required to log in before they can see the cart and prices</Typography.Paragraph></Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Show order inscription option */}\n <div id=\"ws_show_order_inscription_field\" />\n <WebstoreItem\n name=\"global:ws_show_order_inscription_field\"\n value={(ws[\"global:ws_show_order_inscription_field\"]) ? true : false}\n heading=\"Show order inscription option\"\n description={<div>When left unchecked, the customer will have an optional “Instructions” field to use upon checkout. If you want this field to be renamed to “Inscription”, check this option. This is used for stores selling personalized signed editions by the author. Most users should leave this unchecked.</div>}\n />\n\n <Divider dashed />\n {/* Display the auto-generated order confirmation email message */}\n <div id=\"ws_display_auto_order_email_confirmation\" />\n <WebstoreItem\n name=\"global:ws_display_auto_order_email_confirmation\"\n value={(ws[\"global:ws_display_auto_order_email_confirmation\"]) ? true : false}\n heading=\"Display the auto-generated order confirmation email message\"\n description={<div>The following message, or a variation like it, will be displayed at the top of the order confirmation email that customers receive after checking out. The message will change depending on certain contextual choices made by the customer, such as if they chose to pick up their order versus having it shipped, or what communication method (email, phone, or text) they have selected. This message will not replace or hide the next option called <strong>Custom Order confirmation e-mail message</strong> if it is filled in. Use the <strong>Custom confirmation e-mail message</strong> to further elaborate on this default message, or disable this default message and use the custom message to fully customize the top of the email confirmation.\n <div>\n <br />\n <Alert type=\"info\" description={<>\n Thank you! Your order has been submitted.<br /><br />\n <strong>When can you pick up your order?</strong><br /><br />\n You'll receive an email when your order is ready for in-store pick up. Pick up is available during business hours. For immediate assistance, please call {session.store_phone} during regular business hours.\n </>}>\n </Alert>\n </div>\n </div>}\n />\n\n <Divider dashed />\n {/* Order confirmation e-mail message */}\n <div id=\"ws_message_pickup\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Custom confirmation email message for picked up orders</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This message will show up in the confirmation email your customer receives upon checkout. <strong>This message will only display on orders that are being picked up in store.</strong> There are separate messages for shipped and locally delivered orders. This message will appear after the <strong>auto-generated order confirmation email message</strong>, and can be used to elaborate on the built-in message, or to replace it entirely. The default is shown below, where your store’s email address and phone number will be automatically filled in for the @@phone@@ and @@email@@ placeholders. We recommend specifying how long it usually takes before an in-stock order is ready for pick up.</Typography.Paragraph>\n <Form.Item name=\"global:ws_message_pickup\" noStyle initialValue={(ws[\"global:ws_message_pickup\"]) ? ws[\"global:ws_message_pickup\"] : default_ws_message_pickup}>\n <Input.TextArea maxLength={2000} showCount style={{ \"maxWidth\": \"500px\" }} rows={3} >\n </Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Button size=\"small\" onClick={() => form.setFieldsValue({ \"ws_message_pickup\": default_ws_message_pickup })} type=\"primary\"><small>Use default</small></Button>\n </div>\n </Space>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n\n <Divider dashed />\n {/* Checkout message for all orders */}\n <div id=\"ws_message_checkout\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Checkout message for all orders</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This message will be displayed before payment, for all order types (pick up in store, ship, local delivery, and guest checkout). Use this message to communicate any details that are relevant to all order types. This could include any payment/card types you do not accept (ex: Visa Debit cards), how long it takes for in-stock items to be picked and prepared for in-store pick up, if you have a specific area where orders are picked up, or special circumstances for schools or teachers. There are separate messages under the Shipping section for shipped and local delivery orders, so do not specify shipping details here.<br /><br />Highlight text to apply basic formatting like bold, italic, or underline. You can also use basic HTML styling markup if you switch to the HTML mode, such as using span tags to change the text colour to red.</Typography.Paragraph>\n <Form.Item hidden noStyle name=\"global:ws_message_checkout\" initialValue={ws[\"global:ws_message_checkout\"]}>\n <Input.TextArea maxLength={300} showCount style={{ \"maxWidth\": \"500px\" }} rows={3} >\n </Input.TextArea>\n </Form.Item>\n <Tabs size=\"small\" className=\"itemTabs\" type=\"card\">\n <Tabs.TabPane tab={<small>Text</small>} key=\"item-1\">\n <div className=\"ant-input\" style={{ \"padding\": \"10px\", \"borderRadius\": \"2px\", \"minHeight\": \"150px\", \"maxHeight\": \"150px\", \"overflow\": \"scroll\" }}>\n <Editor\n tag=\"p\"\n forcePlainText={true}\n aria-multiline=\"true\"\n role=\"textbox\"\n data-placeholder=\"Checkout message...\"\n text={messageHTML}\n onChange={(e) => {\n setChanged(true)\n setMessageHTML(e)\n form.setFieldsValue({ \"global:ws_message_checkout\": e })\n }}\n options={{ toolbar: { buttons: ['bold', 'italic', 'underline'] } }}\n />\n </div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div style={{ \"height\": \"3px\" }} className=\"shim\" />\n </Tabs.TabPane>\n <Tabs.TabPane tab={<small>HTML</small>} key=\"item-2\">\n <Form.Item>\n <Input.TextArea style={{ \"minHeight\": \"150px\", \"maxHeight\": \"150px\", resize: 'none' }} value={messageHTML} rows={5} onChange={(e) => {\n setMessageHTML(e.target.value)\n setChanged(true)\n form.setFieldsValue({ \"global:ws_message_checkout\": e.target.value });\n\n }} placeholder={\"Checkout message...\"} />\n </Form.Item>\n </Tabs.TabPane>\n </Tabs>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Button size=\"small\" onClick={() => form.setFieldsValue({ \"global:ws_message_checkout\": \"\" })} type=\"primary\"><small>Clear</small></Button>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Communication Preferences */}\n <div id=\"allowed_comm_prefs\" />\n <Space >\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Communication Preferences</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Select which communication preferences will be offered to customers during account creation and checkout. You must enable texting within the Bookmanager software for the <strong>text</strong> option to appear for customers, regardless of the setting here. <em>At least one option must be selected.</em></Typography.Paragraph>\n <Space direction=\"vertical\">\n <Form.Item noStyle valuePropName=\"checked\" initialValue={ws[\"global:allowed_comm_prefs\"][\"email\"]} name={[\"global:allowed_comm_prefs\", \"email\"]}>\n <Checkbox onChange={(e) => checkPreference(e)}>Email</Checkbox>\n </Form.Item>\n <Form.Item noStyle valuePropName=\"checked\" initialValue={ws[\"global:allowed_comm_prefs\"][\"phone\"]} name={[\"global:allowed_comm_prefs\", \"phone\"]}>\n <Checkbox onChange={(e) => checkPreference(e)}>Phone</Checkbox>\n </Form.Item>\n <Form.Item noStyle valuePropName=\"checked\" initialValue={ws[\"global:allowed_comm_prefs\"][\"text\"]} name={[\"global:allowed_comm_prefs\", \"text\"]}>\n <Checkbox onChange={(e) => checkPreference(e)}>Text</Checkbox>\n </Form.Item>\n </Space>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </Space>\n </div>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Form, Col, Typography, Divider, Input, Button, Radio, Card } from \"antd\";\nimport conditional from \"../../utils/conditional\";\nexport default function Region(props) {\n\n const { data, form } = props;\n\n\n const [removed, setRemoved] = useState(false);\n\n\n if (removed) {\n return (<></>);\n }\n return (\n <Col key={data.region_code} md={24} xl={12}>\n <Card >\n <Form.Item noStyle name={['global:shipping_regions', [data.region_code]]} initialValue={data}></Form.Item>\n <Typography.Text>\n <div style={{ \"float\": \"left\" }}><strong>{data.name}  </strong></div>\n <conditional.true value={(data.region_code !== \"--\")}>\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setRemoved(true)} danger size=\"small\"><small>Remove</small></Button></div>\n </conditional.true>\n <br clear=\"all\" />\n <Divider dashed />\n </Typography.Text>\n <Form.Item initialValue={data.charge_type} name={['global:shipping_regions', [data.region_code], \"charge_type\"]}>\n <Radio.Group>\n <Radio key=\"0\" value=\"0\">Store to calculate shipping costs manually</Radio>\n <div className=\"shim\"></div>\n <Radio key=\"1\" value=\"1\">Base rate <br /><div className=\"shim\"></div>\n {/* <conditional.true value={(values.charge_type === \"1\")}> */}\n <Typography.Text type=\"secondary\">Minimum shipping cost <Form.Item key={\"base_rate\"} noStyle initialValue={data.base_rate} name={['global:shipping_regions', [data.region_code], \"base_rate\"]}><Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"100px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Each additional item <Form.Item key={\"base_rate_add\"} noStyle initialValue={data.base_rate_add} name={['global:shipping_regions', [data.region_code], \"base_rate_add\"]}><Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"100px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Maximum shipping cost <Form.Item key={\"base_rate_max\"} noStyle initialValue={data.base_rate_max} name={['global:shipping_regions', [data.region_code], \"base_rate_max\"]}><Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"100px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Free shipping after item total amount exceeds <Form.Item key={\"base_rate_threshold\"} noStyle initialValue={data.base_rate_threshold} name={['global:shipping_regions', [data.region_code], \"base_rate_threshold\"]}><Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"100px\" }}></Input></Form.Item></Typography.Text>\n {/* </conditional.true> */}\n </Radio>\n <div className=\"shim\"></div>\n <Radio key=\"2\" value=\"2\">Free shipping on all orders</Radio>\n <div className=\"shim\"></div>\n <Radio key=\"3\" value=\"3\">Disallowed <br /></Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </Card>\n </Col>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Form, Select, Modal, Button, Alert, message } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport conditional from \"../../utils/conditional\";\n\n\nexport default function AddRegion(props) {\n\n const { show_message = true, country = \"\", province = \"\", regions = [], setRegions = () => {}, setUpdate = () => {} } = props;\n const [countries, setCountries] = useState([]);\n const [provinces, setProvinces] = useState([]);\n const [selectedCountry, setSelectedCountry] = useState(country);\n const [selectedProvince, setSelectedProvince] = useState(province);\n const [errorMsg, setErrorMsg] = useState(\"\");\n\n const [modalVisible, setModalVisible] = useState(false);\n\n const listCountries = () => {\n apiCall(\"country/getList\", {}, (_status, _results) => {\n if (_status) {\n setSelectedProvince(\"\");\n setCountries(_results);\n }\n }, \"customer\");\n }\n useEffect(listCountries, []);\n\n const listProvinces = (_country) => {\n apiCall(\"province/getList\", { country: selectedCountry }, (_status, _results) => {\n if (_status) {\n setProvinces(_results);\n }\n }, \"customer\");\n }\n useEffect(listProvinces, [selectedCountry]);\n\n\n const createNewRegion = (_f) => {\n\n setErrorMsg(\"\");\n let obj = {};\n obj.country = _f[\"country\"];\n if (_f[\"province\"]) {\n obj.region = _f[\"province\"];\n }\n\n apiCall(\"settings/convertCountryRegion\", obj, (_status, _results) => {\n\n if (_status) {\n // success\n setModalVisible(false);\n if(show_message){\n message.success('Region added successfully.');\n }\n \n\n let obj = {};\n\n obj[_results.code] = {\n \"charge_type\": \"0\",\n \"base_rate\": \"\",\n \"region_code\": _results.code,\n \"base_rate_add\": \"\",\n \"base_rate_max\": \"\",\n \"base_rate_threshold\": \"\",\n \"name\": (_results.region_name) ? _results.region_name : _results.country_name\n }\n\n let r = [...regions];\n r.push(obj[_results.code]);\n setRegions(r);\n setUpdate(!props.update);\n\n } else {\n setErrorMsg(_results.error)\n }\n\n })\n }\n\n return (\n <>\n <Modal destroyOnClose title=\"Add Region\" centered footer={null} onCancel={() => setModalVisible(false)} visible={modalVisible}>\n <Form onFinish={(_f) => createNewRegion(_f)} layout=\"vertical\">\n\n <Form.Item initialValue={(selectedCountry) ? selectedCountry : null} name=\"country\" label=\"Country\" rules={[{ validateTrigger: \"onBlur\", validator: (_, value) => (countries.includes(selectedCountry)) ? Promise.resolve() : Promise.reject(\"no\"), message: \"Valid country is required.\", required: true }]}>\n <Select showSearch placeholder=\"Country\" style={{ maxWidth: 400 }} onChange={(v) => setSelectedCountry(v)}>\n {countries.map((item, index) => {\n return (<Select.Option key={index} value={item}>{item}</Select.Option>)\n })}\n </Select>\n </Form.Item>\n\n <conditional.true value={(selectedCountry && provinces.length > 0)}>\n <Form.Item initialValue={(selectedProvince) ? selectedProvince : null} label=\"State / Province\" name=\"province\" rules={[{ validateTrigger: \"onBlur\", validator: (_, value) => (provinces.includes(selectedProvince) || selectedProvince === \"--\") ? Promise.resolve() : (provinces.length > 0) ? Promise.reject(\"no\") : Promise.resolve(), message: \"Valid state / province is required.\", required: true }]}>\n <Select showSearch placeholder=\"State / Province\" onChange={(v) => setSelectedProvince(v)} style={{ maxWidth: 400 }}>\n <Select.Option key={\"--\"} value={\"--\"}>All regions</Select.Option>\n {provinces.map((item, index) => {\n return (<Select.Option key={index} value={item}>{item}</Select.Option>)\n })}\n </Select>\n </Form.Item>\n </conditional.true>\n\n <conditional.true value={(errorMsg)}>\n <Alert showIcon={true} type=\"error\" message={errorMsg} />\n </conditional.true>\n <br />\n <Button htmlType=\"submit\" type=\"primary\">Add Region</Button>\n </Form>\n </Modal>\n\n <Button type=\"primary\" onClick={() => setModalVisible(true)}>Add Region</Button>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Button, Collapse, Form, Input, InputNumber, Modal, Select, Spin, Typography } from \"antd\";\nimport { CaretRightOutlined, DeleteOutlined } from '@ant-design/icons';\n\nexport default function Provider(props) {\n\n const { presets = [], group = {}, data = {}, region = {}, removeProvider = () => { }, updateProvider = () => { } } = props;\n\n const {\n label = \"\",\n cost_min = \"0.00\",\n cost_inc = \"0.00\",\n cost_max = \"0.00\",\n min_free = \"\",\n min_days = \"0\",\n max_days = \"0\",\n filter_preset_id = \"\",\n isbn = \"\"\n } = data;\n\n const [min, setMin] = useState(cost_min)\n const [max, setMax] = useState(cost_max)\n\n\n let m = isbn.replace(\"0S-\", \"\");\n\n const [isbnVal, setIsbnVal] = useState(m);\n\n const validateField = (_reg, _label, _key, _value) => {\n\n if (_key === \"min_free\" && (_value === \"0.00\" || _value === \"0.0\" || _value === \"0\")) {\n Modal.warn({ title: \"Warning\", content: <p style={{ \"fontSize\": \"14px\" }}>Setting <em className=\"c\">Free shipping if total exceeds</em> to <em className=\"c\">$0.00</em> will result in free shipping on all orders for this provider.</p> })\n }\n\n if (_key === \"cost_max\" && parseFloat(_value) < parseFloat(cost_min)) {\n Modal.warn({ title: \"Warning\", content: <p style={{ \"fontSize\": \"14px\" }}>The <em className=\"c\">Maximum shipping cost</em> must be greater than the <em className=\"c\">Minimum shipping cost</em>.</p> })\n }\n\n if (_key === \"cost_min\" && parseFloat(_value) > parseFloat(cost_max)) {\n Modal.warn({ title: \"Warning\", content: <p style={{ \"fontSize\": \"14px\" }}>The <em className=\"c\">Minimum shipping cost</em> must be less than the <em className=\"c\">Maximum shipping cost</em>.</p> })\n }\n\n if (_key === \"isbn\") {\n _value = _value.replace(\"0S-\", \"\");\n _value = \"0S-\" + _value.toUpperCase();\n }\n\n\n\n updateProvider(group, _label, _key, _value);\n\n }\n\n\n\n\n const regex = /[A-Za-z0-9]{3}/g;\n\n return (\n\n\n <div style={{ \"textAlign\": \"left\", \"paddingLeft\": \"23px\" }}>\n\n\n <div className=\"shim\"></div><div className=\"shim\"></div>\n\n <Spin spinning={(group.disallowed || group.free)} indicator={<></>}>\n <Typography.Text type=\"secondary\">Minimum shipping cost $ <Form.Item noStyle ><InputNumber precision={2} className=\"hidecontrols\" onChange={(e) => setMin(e)} onBlur={(e) => validateField(region.region, label, \"cost_min\", e.target.value)} value={min} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></InputNumber></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Each additional item $ <Form.Item noStyle ><InputNumber precision={2} className=\"hidecontrols\" onBlur={(e) => updateProvider(group, label, \"cost_inc\", e.target.value)} defaultValue={cost_inc} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></InputNumber></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Maximum shipping cost $ <Form.Item noStyle ><InputNumber precision={2} className=\"hidecontrols\" onChange={(e) => setMax(e)} onBlur={(e) => validateField(region.region, label, \"cost_max\", e.target.value)} value={max} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></InputNumber></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Free shipping if total exceeds $ <Form.Item noStyle ><InputNumber precision={2} className=\"hidecontrols\" onBlur={(e) => validateField(region.region, label, \"min_free\", e.target.value)} defaultValue={min_free} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></InputNumber></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n </Spin>\n\n <Typography.Text type=\"secondary\">Orders arrive between <Form.Item noStyle ><InputNumber className=\"hidecontrols\" onBlur={(e) => updateProvider(group, label, \"min_days\", e.target.value)} defaultValue={min_days} size=\"small\" style={{ \"maxWidth\": \"45px\" }}></InputNumber></Form.Item> - <Form.Item noStyle ><InputNumber className=\"hidecontrols\" onBlur={(e) => updateProvider(group, label, \"max_days\", e.target.value)} defaultValue={max_days} size=\"small\" style={{ \"maxWidth\": \"45px\" }}></InputNumber></Form.Item> Day(s)</Typography.Text> <br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">ISBN <Form.Item noStyle ><Input maxLength={3} className=\"hidecontrols\" onBlur={(e) => validateField(region.region, label, \"isbn\", e.target.value)} onChange={(e) => {\n\n setIsbnVal(e.target.value);\n\n }} defaultValue={isbnVal} size=\"small\" prefix=\"0S-\" style={{ \"maxWidth\": \"75px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n {(!regex.test(isbnVal) && <div><small style={{ \"color\": \"red\" }}>ISBN must include 3 additional alphanumeric characters.</small></div>)}\n <br />\n <Typography.Text type=\"secondary\">This provider will only be offered for carts containing products that match the following <em>Browse Filter Preset:</em> <Form.Item noStyle >\n <Select\n defaultValue={parseInt(filter_preset_id) || \"\"}\n onChange={(e) => updateProvider(group, label, \"filter_preset_id\", e.toString())}\n placeholder=\"Select...\"\n options={[{ label: \"All browsable titles\", value: \"\" }].concat([...presets])}\n filterOption={(input, option) => {\n return (option?.label ?? '').toLowerCase().includes(input.toLowerCase())\n }}\n showSearch size=\"small\" style={{ \"width\": \"350px\" }} >\n </Select>\n </Form.Item>\n </Typography.Text>\n \n <br /><div className=\"shim\"></div>\n\n\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n\n\n )\n\n\n}","import React, { useEffect, useState } from \"react\";\nimport { Card, Col, Divider, Typography, Row, Collapse, Form, Input, Button, Popconfirm, message, Space, Empty, Spin, Menu, Dropdown, Tooltip } from \"antd\";\nimport { CaretRightOutlined, DeleteOutlined } from '@ant-design/icons';\nimport Checkbox from \"antd/lib/checkbox/Checkbox\";\nimport Provider from \"./Provider\";\nimport { apiCall } from \"../../utils/Api\";\nimport { flattenObject, serialize } from \"../../utils/Utils\";\nimport AddRegion from \"./AddRegion\";\n\nexport default function Multiship(props) {\n\n const { form, setChanged = () => { } } = props;\n const [regions, setRegions] = useState(props.regions);\n const [visible, setVisible] = useState(false);\n const [presets, setPresets] = useState([])\n\n\n const getPresets = () => {\n apiCall(\"toolbox/get\", { header: \"status\" }, (_status, _result) => {\n if (_status) {\n\n let arr = _result.store_specific.concat(_result.bookmanager)\n setPresets(arr.map(item => {\n return {\n value: item.id,\n label: item.name\n }\n }))\n }\n })\n }\n\n useEffect(getPresets, [])\n\n\n const activeObj = (_arr) => {\n let _ret = {}\n _arr.forEach(item => {\n _ret[item.region] = 1;\n })\n return _ret;\n }\n\n const [active, setActive] = useState(activeObj(props.regions))\n\n const reduceArrayByKey = (arr) => {\n let uniqueValues = new Set();\n return arr.reduce((acc, curr) => {\n // create a temp object that excludes name, region for comparison\n let _compare = {\n disallowed: curr.disallowed,\n free: curr.free,\n providers: curr.providers,\n // add a synthetic key for poping out later\n inc: (curr.hasOwnProperty(\"inc\")) ? curr.inc : 0\n\n }\n // compare objects using strings because JS isn't very good \n if (!uniqueValues.has(serialize(_compare))) {\n uniqueValues.add(serialize(_compare));\n acc.push({\n // Put all matched objects in a group\n group: arr.filter(item => serialize({\n // match temp object by removing name, region\n disallowed: item.disallowed,\n free: item.free,\n providers: item.providers,\n inc: (item.hasOwnProperty(\"inc\")) ? item.inc : 0\n }) === serialize(_compare)),\n // since the data matches, any instance will work - add to the top level for convenience \n providers: curr.providers,\n disallowed: curr.disallowed,\n free: curr.free,\n inc: curr.hasOwnProperty(\"inc\") ? curr.inc : 0\n });\n }\n return acc;\n }, []);\n }\n\n const removeRegion = (_region) => {\n\n setChanged(true);\n form.setFieldsValue({ \"global:ws_multiship_json\": regions.filter(item => item.region !== _region) })\n setRegions(regions.filter(item => item.region !== _region));\n }\n\n\n const popRegion = (_region) => {\n\n // increment \n _region.inc = (parseInt(_region.inc) + 1) || 1;\n let _all = [...regions];\n let _index = _all.findIndex(item => item.region === _region.region);\n if (_index > -1) {\n _all[_index] = _region;\n setRegions(_all)\n }\n\n }\n\n\n\n const updateGroup = (_group, _key, _value) => {\n\n setChanged(true);\n\n _group[_key] = _value;\n\n _group.group.forEach(element => {\n element[_key] = _value;\n });\n\n\n let _regions = [...regions];\n let _groupregions = _group.group.map(item => item.region)\n\n // loop through and update providers\n _regions.forEach(item => {\n if (_groupregions.includes(item.region)) {\n item[_key] = _group[_key]\n }\n })\n\n form.setFieldsValue({ \"global:ws_multiship_json\": _regions })\n setRegions(_regions);\n\n\n\n }\n\n\n\n const updateRegion = (_region, _key, _value) => {\n\n setChanged(true);\n\n let _arr = [...regions];\n let _ind = _arr.findIndex(item => item.region === _region);\n let _reg = _arr.find(item => item.region === _region);\n if (_reg) {\n _reg[_key] = _value;\n _arr[_ind] = _reg;\n form.setFieldsValue({ \"multiship\": JSON.stringify(_arr) })\n setRegions(_arr);\n }\n }\n\n\n const updateProviderGroup = (_group, _label, _key, _value) => {\n\n\n\n setChanged(true);\n // find the provider\n let ind = _group.providers.findIndex(item => item.label === _label);\n\n if (ind > -1) {\n // update provider\n _group.providers[ind][_key] = _value;\n } else {\n return false;\n }\n\n // copy regions, sample group's regions\n let _regions = [...regions];\n let _groupregions = _group.group.map(item => item.region)\n\n // loop through and update providers\n _regions.forEach(item => {\n if (_groupregions.includes(item.region)) {\n item.providers = _group.providers\n }\n })\n\n form.setFieldsValue({ \"global:ws_multiship_json\": _regions })\n \n setRegions(_regions);\n\n }\n\n const updateProvider = (_region, _provider, _key, _value) => {\n\n setChanged(true);\n\n if (_key !== \"isbn\" && isNaN(_value)) {\n _value = \"0.00\";\n }\n\n let _arr = [...regions];\n let _ind = _arr.findIndex(item => item.region === _region);\n let _reg = _arr.find(item => item.region === _region);\n if (_reg) {\n let _provInd = _reg.providers.find(item => item.label === _provider);\n let _prov = _reg.providers.find(item => item.label === _provider);\n if (_prov) {\n _prov[_key] = _value;\n _reg.providers[_provInd] = _prov;\n _arr[_ind] = _reg;\n form.setFieldsValue({ \"multiship\": JSON.stringify(_arr) })\n setRegions(_arr);\n }\n }\n }\n\n\n const removeProviderGroup = (e, _group, _provider) => {\n\n e.preventDefault();\n e.stopPropagation();\n setChanged(true);\n\n // remove from the group\n _group.providers = _group.providers.filter(item => item.label !== _provider);\n\n // copy regions, sample group's regions\n let _regions = [...regions];\n let _groupregions = _group.group.map(item => item.region)\n\n // loop through and update providers\n _regions.forEach(item => {\n if (_groupregions.includes(item.region)) {\n item.providers = _group.providers\n }\n })\n\n form.setFieldsValue({ \"global:ws_multiship_json\": _regions })\n setRegions(_regions);\n\n\n\n }\n\n const removeProvider = (e, _region, _providerLabel) => {\n e.preventDefault();\n e.stopPropagation();\n\n setChanged(true);\n let _arr = [...regions];\n let _ind = _arr.findIndex(item => item.region === _region);\n let _reg = _arr.find(item => item.region === _region);\n if (_reg) {\n _reg.providers = _reg.providers.filter(item => item.label !== _providerLabel);\n _arr[_ind] = _reg;\n form.setFieldsValue({ \"multiship\": JSON.stringify(_arr) })\n\n setActive({ ...active, [_region]: _reg.providers.length });\n\n setRegions(_arr);\n }\n }\n\n const drawRegions = () => {\n // Group if providers match and not the default\n let arr = reduceArrayByKey(regions.filter(item => item.region !== \"--\"))\n // add the default back in\n let _default = regions.find(item => item.region === \"--\");\n if (_default) {\n arr.unshift({\n group: [_default],\n disallowed: _default.disallowed,\n providers: _default.providers,\n free: _default.free,\n inc: _default.hasOwnProperty(\"inc\") ? _default.inc : 0\n })\n }\n return arr.map((item, index) => drawGroup(item, index));\n }\n\n\n\n\n const addProviderToGroup = (_group, _provider) => {\n\n setChanged(true);\n\n // set up default object\n let obj = {\n label: _provider,\n cost_min: \"0.00\",\n cost_inc: \"0.00\",\n cost_max: \"\",\n min_free: \"\",\n min_days: \"0\",\n max_days: \"0\",\n filter_preset_id: \"\",\n }\n\n // add to providers\n _group.providers.push(obj);\n\n // copy regions, sample group's regions\n let _regions = [...regions];\n let _groupregions = _group.group.map(item => item.region)\n\n // loop through and update providers / set active key for new provider so it opens automatically\n let _pindex = 0;\n let _pcount = 0;\n _regions.forEach((item, index) => {\n if (_groupregions.includes(item.region)) {\n _pindex = index;\n _pcount = _group.providers.length; \n item.providers = _group.providers\n }\n })\n\n\n setSel({...sel, [\"p\" + _pindex.toString()] : _pcount})\n\n form.setFieldsValue({ \"global:ws_multiship_json\": _regions })\n setRegions(_regions);\n\n\n\n\n\n\n }\n\n\n\n const addProvider = (_region, _provider) => {\n if (!_provider) {\n return;\n }\n\n setChanged(true);\n\n let _regions = [...regions];\n let _regIndex = _regions.findIndex(item => item.region === _region);\n let _reg = _regions.find(item => item.region === _region);\n\n if (_reg) {\n\n let _exists = _reg.providers.find(item => item.label === _provider);\n if (_exists) {\n message.error(\"Provider already exists.\")\n return;\n } else {\n\n let obj = {\n label: _provider,\n cost_min: \"0.00\",\n cost_inc: \"0.00\",\n cost_max: \"\",\n min_free: \"\",\n min_days: \"0\",\n max_days: \"0\",\n filter_preset_id: \"\",\n }\n\n _reg.providers.push(obj);\n\n setActive({ ...active, [_region]: _reg.providers.length });\n _regions[_regIndex] = _reg;\n form.setFieldsValue({ \"global:ws_multiship_json\": _regions })\n setRegions(_regions);\n message.success(\"Provider added.\");\n return;\n }\n }\n\n }\n\n\n const getUniqueProviderNames = () => {\n let _ret = [];\n regions.forEach(element => {\n element.providers.forEach(provider => {\n if (!_ret.includes(provider.label)) {\n _ret.push(provider.label);\n }\n })\n });\n return _ret;\n }\n\n\n\n const [provider, setProvider] = useState({});\n\n const [sel, setSel] = useState([]);\n\n const drawGroup = (_group, _index) => {\n\n\n return (\n <Col key={_index} md={24} xl={24}>\n <Card style={{ \"width\": \"455px\", \"minHeight\": \"335px\" }}>\n <div style={{ \"minHeight\": \"372px\" }}>\n <Typography.Text>\n <div style={{ \"float\": \"left\" }}>\n\n {((_group.group.length > 1) &&\n\n <div style={{ \"lineHeight\": \"12px\" }}>\n <strong>\n <Space size={1} split={<>,  </>} wrap>\n {_group.group.map(item => {\n return (<a style={{ \"cursor\": \"pointer\" }} onClick={() => popRegion(item)}>{item.name}</a>)\n })}\n </Space>\n </strong>\n\n <div>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <small style={{ \"color\": \"#d13232\" }}><em>Regions with idential settings are grouped - to separate, click on the region's name</em></small>\n </div>\n </div>\n )}\n\n {((_group.group.length === 1) && <><strong>\n {(_group.group[0].region === \"--\") ? \"All other regions\" : _group.group[0].name}\n\n </strong><Popconfirm placement=\"right\" title={\"Delete region?\"} onConfirm={() => removeRegion(_group.group[0].region)} okText=\"Yes\" cancelText=\"No\"><Button type=\"text\" danger size=\"small\"><small><DeleteOutlined /></small></Button></Popconfirm></>)}\n\n {/* {(_region.region === \"--\") ? \"All other regions\" : _region.name} */}\n\n\n\n {/* <Popconfirm placement=\"right\" title={\"Delete region?\"} onConfirm={() => removeRegion(_region.region)} okText=\"Yes\" cancelText=\"No\"><Button type=\"text\" danger size=\"small\"><small><DeleteOutlined /></small></Button></Popconfirm> */}\n\n </div>\n\n <br clear=\"all\" />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Space>\n <Checkbox onChange={() => updateGroup(_group, \"disallowed\", !(_group.disallowed))} checked={(_group.disallowed) ? \"checked\" : \"\"}><small>Disallowed</small></Checkbox>\n <Tooltip title={(_group.providers.length > 0) ? null : \"Add a Provider first to enable this option\"} >\n <Checkbox onChange={() => updateGroup(_group, \"free\", !(_group.free))} disabled={!(_group.providers.length > 0)} checked={(_group.free) ? \"checked\" : \"\"} ><small>Free shipping on all orders</small></Checkbox>\n </Tooltip>\n </Space>\n <Divider dashed style={{ \"marginTop\": \"10px\", \"marginBottom\": \"0px\" }} />\n </Typography.Text>\n <Spin spinning={(_group.disallowed)} indicator={<></>}>\n {/* {drawProviders(_group.providers, _group)} */}\n <Providers index={_index} sel={sel} setSel={setSel} presets={presets} group={_group} providers={_group.providers} updateProviderGroup={updateProviderGroup} />\n </Spin>\n </div>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <div className=\"shim\" />\n <Dropdown overlay={<Menu>{getUniqueProviderNames().map(item => {\n return <Menu.Item onClick={() => addProviderToGroup(_group, item)} key={item}><small>{item}</small></Menu.Item>\n })}</Menu>}>\n <Input.Search placeholder=\"Example: Media Mail, UPS Standard, FedEx Overnight, Standard Shipping\" size=\"small\" disabled={(_group.disallowed || _group.free)} allowClear onSearch={(e) => {\n if (e) {\n addProviderToGroup(_group, e);\n }\n\n }} enterButton={<small>Add Provider</small>} />\n </Dropdown>\n\n </Card>\n </Col>\n )\n\n }\n\n\n \n\n\n const Providers = (props) => {\n const { providers = [], group = {}, updateProviderGroup = () => { }, sel = \"\", setSel=() => {}, index = \"\" } = props;\n\n // State for selected accordian item\n const [selected, setSelected] = useState((sel.hasOwnProperty(\"p\"+index.toString())) ? sel[\"p\"+index.toString()]: providers.length);\n\n // Automatically change selection if provider is added or deleted\n const check = () => { \n \n if(provider.length>0 && providers.length !== selected){\n alert(providers.length)\n // setSelected(providers.length); \n }\n \n \n \n }\n useEffect(check, [providers])\n\n // Show empty message if there are no providers\n if (providers.length === 0) {\n return (<><br /><br /><Empty description=\"No providers\" image={Empty.PRESENTED_IMAGE_SIMPLE} /><br /><br /></>)\n }\n\n return (\n <>\n \n <Collapse expandIcon={({ isActive }) => <CaretRightOutlined className=\"c\" rotate={isActive ? 90 : 0} />} activeKey={selected} onChange={(e) => setSel({...sel, [\"p\" + index.toString()] : e})} expandIconPosition=\"left\" ghost accordion>\n {providers.map((item, index) => {\n return (\n <Collapse.Panel key={(index + 1)} header={<div style={{ \"paddingLeft\": \"5px\", \"marginTop\": \"-1px\" }}>\n <span className=\"c\">{item.label}</span> \n <Popconfirm onConfirm={(e) => removeProviderGroup(e, group, item.label)} placement=\"right\" title={\"Delete provider?\"} okText=\"Yes\" cancelText=\"No\">\n <Button onClick={(e) => { e.stopPropagation(); e.preventDefault() }} type=\"link\" danger size=\"small\">\n <small><DeleteOutlined /></small>\n </Button>\n </Popconfirm></div>}>\n <Provider presets={presets} group={group} updateProvider={updateProviderGroup} data={item} />\n </Collapse.Panel>\n )\n })}\n </Collapse>\n </>\n )\n\n\n }\n\n \n\n const updateRegions = (_regions = []) => {\n\n setChanged(true);\n\n let _arr = [...regions];\n let _count = 0;\n _regions.forEach(item => {\n let _code = item.region_code;\n let _name = item.name;\n if (!(_arr.find(i => i.region === _code))) {\n _arr.push({ region: _code, name: _name, disallowed: false, free: false, providers: [] });\n _count++;\n } else {\n\n }\n\n })\n\n if (_count > 0) {\n form.setFieldsValue({ \"global:ws_multiship_json\": _arr });\n setRegions(_arr);\n message.success(\"Region successfully added.\")\n } else {\n message.error(\"Region(s) already exists.\");\n }\n }\n\n const drawProvider = (_provider, _region) => {\n\n let {\n label = \"\",\n cost_min = \"0.00\",\n cost_inc = \"0.00\",\n cost_max = \"0.00\",\n min_free = \"0.00\",\n min_days = \"0\",\n max_days = \"0\",\n filter_preset_id = \"\",\n\n } = _provider;\n\n\n\n return (\n <Collapse.Panel header={<div style={{ \"paddingLeft\": \"5px\", \"marginTop\": \"-1px\" }}><span className=\"c\">{label}</span> <Popconfirm placement=\"right\" title={\"Delete provider?\"} onConfirm={(e) => removeProvider(e, _region.region, label)} okText=\"Yes\" cancelText=\"No\"><Button onClick={(e) => { e.stopPropagation(); e.preventDefault() }} type=\"link\" danger size=\"small\"><small><DeleteOutlined /></small></Button></Popconfirm></div>} key={label}>\n <div style={{ \"textAlign\": \"left\", \"paddingLeft\": \"23px\" }}>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Minimum shipping cost <Form.Item noStyle ><Input onBlur={(e) => updateProvider(_region.region, label, \"cost_min\", e.target.value)} defaultValue={cost_min} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Each additional item <Form.Item noStyle ><Input onBlur={(e) => updateProvider(_region.region, label, \"cost_inc\", e.target.value)} defaultValue={cost_inc} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Maximum shipping cost <Form.Item noStyle ><Input onBlur={(e) => updateProvider(_region.region, label, \"cost_max\", e.target.value)} defaultValue={cost_max} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Free shipping if total exceeds <Form.Item noStyle ><Input onBlur={(e) => updateProvider(_region.region, label, \"min_free\", e.target.value)} defaultValue={min_free} size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"70px\" }}></Input></Form.Item></Typography.Text><br /><div className=\"shim\"></div>\n <Typography.Text type=\"secondary\">Orders arrive between <Form.Item noStyle ><Input onBlur={(e) => updateProvider(_region.region, label, \"min_days\", e.target.value)} defaultValue={min_days} size=\"small\" style={{ \"maxWidth\": \"35px\" }}></Input></Form.Item> - <Form.Item noStyle ><Input onBlur={(e) => updateProvider(_region.region, label, \"max_days\", e.target.value)} defaultValue={max_days} size=\"small\" style={{ \"maxWidth\": \"35px\" }}></Input></Form.Item> Day(s)</Typography.Text> <br /><div className=\"shim\"></div>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </Collapse.Panel>\n )\n }\n\n return (\n <>\n\n \n <Row gutter={[30, 30]}>\n {drawRegions()}\n </Row>\n <br />\n \n <Typography.Text><strong>Add new region</strong> </Typography.Text>\n <div className=\"shim\"></div>\n <Typography.Paragraph type=\"secondary\">Add a new region by selecting a country. Provinces, states, and territories can only be selected for Canada and the US. Regions with the same Provider settings will be automatically grouped together.</Typography.Paragraph>\n <AddRegion show_message={false} setRegions={updateRegions} />\n <br /><br />\n \n <Form.Item hidden initialValue={regions} name=\"global:ws_multiship_json\">\n <Input />\n </Form.Item>\n\n\n\n\n \n </>\n )\n}","import React, { useState } from \"react\";\nimport { Form, Typography, Divider, Input, Button, Row, Col, Space, Checkbox, Switch, Radio, Alert } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nimport Editor from \"react-medium-editor\";\nimport Region from \"../Region\";\nimport AddRegion from \"../AddRegion\";\nimport Multiship from \"../Multiship\";\nimport Overlay from \"../../../components/Overlay\";\nimport MSWrap from \"./MSWrap\";\nimport { drawMSFooter, drawMSTitleBar } from \"../../../utils/Utils\";\nimport MultistoreItem from \"../MultistoreItem\";\nexport default function ShippingSection(props) {\n\n const { ws, form, regions = [], setChanged = () => { } } = props;\n const default_ws_message_ship_cart = \"Shipping charges still need to be calculated and then added to your order. We will inform you of the final amount before shipping your order.\"\n const default_ws_message_ship = \"We will contact you during normal business hours to confirm availability, final pricing, taxes or shipping charges (if applicable.) We can be reached by phone at @@phone@@ or by email at @@email@@ should you have any questions or concerns.\"\n\n\n const [multiship, setMultiship] = useState((ws[\"global:multiship_enabled\"]));\n const showMultishipInfo = (!ws[\"global:multiship_enabled\"]);\n\n const primary = (window.sitesettings.stores[0]);\n const stores = (primary.is_primary) ? window.sitesettings.stores : [window.sitesettings.stores.find(item => item.is_primary)];\n\n\n const toPrice = (_n) => {\n\n return Number.parseFloat(_n).toFixed(2);\n\n }\n\n const drawRegions = () => {\n\n\n return (<>\n {regions.map(function (region, index) {\n return (<Region form={form} data={region} />)\n })}\n </>)\n ;\n }\n\n\n\n return (\n <>\n\n <div id=\"shipping\" style={{ \"padding\": \"10px 30px\" }}>\n\n <Typography.Title level={4}>Shipping</Typography.Title>\n <Divider />\n\n {/* Enable local delivery */}\n <div id=\"ws_local_delivery_enabled\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_local_delivery_enabled\"\n heading=\"Enable local delivery\"\n description={<div>Customer's will be offered another shipping option outside of your regular <strong>Shipping Providers / Cost calculator.</strong> Customers will only be able to checkout with Local Delivery if their ship to postal/ZIP code qualifies. They will be warned if their address does not qualify so they can try an alternate address that may qualify.</div>}\n />\n <Divider dashed />\n\n {/* Enable shipping */}\n <div id=\"ws_delivery_ship_enabled\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_delivery_ship_enabled\"\n heading=\"Enable shipping\"\n description={<div>If disabled, your customers will only be offered <strong>Pick up in-store</strong> or <strong>Local Delivery</strong> (if enabled).</div>}\n />\n\n <Divider dashed />\n {/* Local delivery message */}\n <div id=\"ws_message_local_cart\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Local delivery message</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This message is displayed to customers at checkout, as well as in the customer’s order confirmation email.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">Use this message to list the qualifications and details for local delivery. This should include the cities, areas, or distance from the store that you are willing to deliver to. If you are doing the delivery yourself (not using a shipping courier), it is best to also provide an estimated delivery time or order cut-off, along with any days you are not delivering. If you are using a shipping service, specify that service so your customers know what to expect. It may also be worth noting that apartment buildings or gated communities with mail rooms only accessible to valid courier services may pose a problem for deliveries done by store staff.</Typography.Paragraph>\n <Form.Item name=\"global:ws_message_local_cart\" initialValue={ws[\"global:ws_message_local_cart\"]}>\n <Input.TextArea maxLength={300} placeholder=\"Example message: Local delivery is available Monday through Saturday for most Kelowna, Westbank, and West Kelowna addresses. There is a $10 delivery fee for orders under $99 (before taxes), while orders over $99 deliver for free. Orders must be prepaid in advance before delivery. Most in-stock orders are delivered same day if placed before 3pm, and will be dropped off between 4-6pm. Orders will be placed on your doorstep, so please specify in the check out instructions area if you would like us to text, call, ring the doorbell, or knock when we arrive. Out of stock orders will be delivered once they arrive, and we will notify you when they are ready for delivery. If you live in a gated community or apartment with a locked mail room, Local Delivery is unfortunately not available, so please select another shipping options instead.\" showCount style={{ \"maxWidth\": \"500px\" }} rows={8} >\n </Input.TextArea>\n </Form.Item>\n\n </div>\n </Space>\n\n <Divider dashed />\n\n {/* Local delivery postal or ZIP codes */}\n <div id=\"ldc_local_delivery_code\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Local delivery postal or ZIP codes</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Local delivery will only be available to postal or ZIP codes on this list. There is no limit to the number of postal codes on this list. Separate codes with commas. You can input only the first three digits of a postal code if you want to target a larger area. For example, both <strong>V1Y7G9</strong> and <strong>V1Y</strong> will be accepted. <br /><div className=\"shim\" /><em>We recommend saving a copy of this list in case it needs to be restored.</em></Typography.Paragraph>\n <Form.Item name=\"global:ldc_local_delivery_code\" noStyle initialValue={ws[\"global:ldc_local_delivery_code\"]}>\n <Input.TextArea placeholder=\"Example: V1W,V1Y7G9,11231,V1V 1H1,07802\" style={{ \"maxWidth\": \"500px\" }} rows={3} >\n </Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Button size=\"small\" onClick={() => form.setFieldsValue({ \"global:ldc_local_delivery_code\": \"\" })} type=\"primary\"><small>Clear</small></Button>\n </div>\n </Space>\n <Divider dashed />\n {/* Find postal codes */}\n <div id=\"ldc_local_find_postal_codes\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Find postal codes</Typography.Title>\n <Typography.Paragraph type=\"secondary\">You can use the following third-party site to generate a list based on a radius or drawn boundaries on a map:</Typography.Paragraph>\n <Typography.Link><a target=\"_blank\" href=\"https://www.freemaptools.com/find-canada-postcodes-inside-radius.htm\">Canadian postal codes by radius from a point</a></Typography.Link>\n <br />\n <Typography.Link><a target=\"_blank\" href=\"https://www.freemaptools.com/find-canada-postcodes-inside-user-defined-area.htm\">Canadian postal codes inside user defined boundaries</a></Typography.Link>\n <br />\n <Typography.Link><a target=\"_blank\" href=\"https://www.freemaptools.com/find-zip-codes-inside-radius.htm\">US ZIP codes by radius from a point</a></Typography.Link>\n <br />\n <Typography.Link><a target=\"_blank\" href=\"https://www.freemaptools.com/find-zip-codes-inside-user-defined-area.htm\">US ZIP codes inside user defined boundaries</a></Typography.Link>\n <br />\n </div>\n </Space>\n\n <Divider dashed />\n\n {/* Local delivery postal or ZIP codes */}\n <div id=\"ws_delivery_local_availability\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>\"Local Delivery is available to...\" message:</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Specify the areas, boundaries, distance from the store, distance from a point, or cities that qualify for local delivery. This message is displayed before checkout, at the step where customers choose their pick up or delivery preference. This message will begin with “Local delivery is available to” followed by the below text:</Typography.Paragraph>\n <Form.Item name=\"global:ws_delivery_local_availability\" initialValue={ws[\"global:ws_delivery_local_availability\"]}>\n <Input maxLength={100} style={{ \"maxWidth\": \"500px\" }}></Input>\n </Form.Item>\n\n </div>\n </Space>\n\n <Divider dashed />\n {/* Find postal codes */}\n <div id=\"ws_delivery_local_fee\" />\n <div id=\"ws_delivery_local_minimum\" />\n <div id=\"ws_delivery_local_free_enabled\" />\n <div id=\"ws_delivery_local_free\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Local delivery threshold and fees</Typography.Title>\n <Typography.Text>Local delivery fee  \n <Form.Item name=\"global:ws_delivery_local_fee\" noStyle initialValue={toPrice(ws[\"global:ws_delivery_local_fee\"])}>\n <Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"65px\" }}></Input>\n </Form.Item>\n </Typography.Text>\n <br /><div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text>Order total must exceed  \n <Form.Item name=\"global:ws_delivery_local_minimum\" noStyle initialValue={toPrice(ws[\"global:ws_delivery_local_minimum\"])}>\n <Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"65px\" }}></Input>\n </Form.Item>  to qualify.</Typography.Text>\n <br /><div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text>\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_delivery_local_free_enabled\"]) ? true : false} name=\"global:ws_delivery_local_free_enabled\" noStyle>\n <Checkbox />\n </Form.Item> Enable free local delivery over a set amount</Typography.Text>\n <br /><div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text>Free delivery if order total exceeds:  \n <Form.Item name=\"global:ws_delivery_local_free\" noStyle initialValue={toPrice(ws[\"global:ws_delivery_local_free\"])}>\n <Input size=\"small\" prefix=\"$\" style={{ \"maxWidth\": \"85px\" }}></Input>\n </Form.Item>\n </Typography.Text>\n <br />\n </div>\n </Space>\n\n\n <Divider dashed />\n {/* Shipping cost exception list */}\n <div id=\"ws_shipping_base_rate_ignore_csv\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Shipping cost exception list</Typography.Title>\n <Typography.Paragraph type=\"secondary\">ISBNs in this list will not be factored into shipping rates. Separate product numbers by commas.</Typography.Paragraph>\n <Form.Item initialValue={ws[\"global:ws_shipping_base_rate_ignore_csv\"]} name=\"global:ws_shipping_base_rate_ignore_csv\" >\n <Input.TextArea style={{ \"maxWidth\": \"500px\", \"fontFamily\": \"ApercuMono\" }} rows={3} >\n </Input.TextArea>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Shipping messages */}\n <div id=\"ws_message_ship_cart\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Shipping message (Before checkout)</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This message will display alongside the standard courier shipping options. Enter shipping details that you want your customer to know BEFORE they checkout, such as the regions you ship to, the various shipping services you use, costs, delivery times for couriers, how long it takes from the time you receive an order until you ship it out, etc.</Typography.Paragraph>\n <div className=\"ant-input\" style={{ \"padding\": \"10px\", \"borderRadius\": \"2px\", \"minHeight\": \"150px\", \"maxHeight\": \"150px\", \"overflow\": \"auto\" }}>\n <Editor\n tag=\"p\"\n forcePlainText={true}\n aria-multiline=\"true\"\n role=\"textbox\"\n data-placeholder=\"Example:\n We ship to Canada and the US only, using Purolator and Canada Post. Oversized items may incur additional charges, and we will contact you with an updated quote before processing if that's the case. Orders ship out within 24 hours of receiving payment. See the About -> Shipping menu for rates and ETAs.\n Please Note:\n Schools & Institutional Accounts: We offer discounted rates for large orders and we will supply a custom quote based on each order. Ignore shipping costs generated at the time of checkout.\"\n text={(ws[\"global:ws_message_ship_cart\"]) ? ws[\"global:ws_message_ship_cart\"] : \"\"}\n onChange={(e) => {\n setChanged(true)\n form.setFieldsValue({ ws_message_ship_cart: e })\n }}\n options={{ toolbar: { buttons: ['bold', 'italic', 'underline'] } }}\n />\n </div>\n\n\n <Form.Item noStyle initialValue={(ws[\"global:ws_message_ship_cart\"]) ? ws[\"global:ws_message_ship_cart\"] : \"\"} name=\"global:ws_message_ship_cart\" >\n <Input.TextArea maxLength={1200} showCount hidden={((ws[\"global:ws_message_ship_cart\"]))} style={{ \"maxWidth\": \"500px\" }} rows={3} >\n </Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n {/* <Button size=\"small\" onClick={() => form.setFieldsValue({ \"ws_message_ship_cart\": default_ws_message_ship_cart })} type=\"primary\"><small>Use default</small></Button> */}\n </div>\n </Space>\n\n <Divider dashed />\n {/* Shipping cost exception list */}\n <div id=\"ws_message_ship\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Shipping message (After checkout)</Typography.Title>\n <Typography.Paragraph type=\"secondary\">This message will show up in the customer's order confirmation email. Enter any details that your customers may want to know AFTER they have checked out.</Typography.Paragraph>\n <div className=\"ant-input\" style={{ \"padding\": \"10px\", \"borderRadius\": \"2px\", \"minHeight\": \"150px\", \"maxHeight\": \"150px\", \"overflow\": \"auto\" }}>\n <Editor\n tag=\"p\"\n forcePlainText={true}\n aria-multiline=\"true\"\n role=\"textbox\"\n data-placeholder=\"Example: Your order will be shipped out within 24 hours after we receive payment. We will let you know when your order has shipped, and provide a tracking number and an ETA.\"\n text={(ws[\"global:ws_message_ship\"]) ? ws[\"global:ws_message_ship\"] : \"\"}\n onChange={(e) => {\n setChanged(true)\n form.setFieldsValue({ ws_message_ship: e })\n }}\n options={{ toolbar: { buttons: ['bold', 'italic', 'underline'] } }}\n />\n </div>\n <Form.Item noStyle initialValue={(ws[\"global:ws_message_ship\"]) ? ws[\"global:ws_message_ship\"] : \"\"} name=\"global:ws_message_ship\" >\n <Input.TextArea hidden maxLength={1200} showCount style={{ \"maxWidth\": \"500px\" }} rows={4} >\n </Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </Space>\n <Divider dashed />\n\n {((multiship) &&\n <>\n {/* Enable local delivery */}\n <div id=\"ws_batch_shipping\" />\n <WebstoreItem\n name=\"global:ws_batch_shipping\"\n value={(ws[\"global:ws_batch_shipping\"]) ? true : false}\n heading=\"Enable batch shipping\"\n description={<div>Enabling will offer customers the option to ship their order in batches. In-store items can be shipped right away, while backordered items will be shipped when the remainder of their order has arrived. Shipping prices will be affected, and the price difference will be displayed to the customer before selecting the option.</div>}\n />\n <Divider dashed />\n </>\n\n )}\n\n\n\n {((multiship) &&\n\n <>\n {/* Shipping cost calculator */}\n <div id=\"multiship\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n\n {((showMultishipInfo) && <>\n <Alert\n style={{ \"width\": \"935px\" }}\n showIcon\n // message=\"Warning Text\"\n description=\"Enabling multiple courier shipping will replace the current legacy shipping settings. \"\n type=\"info\"\n />\n <br />\n </>)}\n\n <Typography.Title level={5}>Shipping Providers / Cost calculator</Typography.Title>\n <Typography.Paragraph type=\"secondary\">These options control how shipping costs are calculated for customers. First add a <strong>Region</strong> (Country or Province/State/Territory), then add <strong>Provider</strong>(s) for that region. Providers could be a specific courier like UPS, a specific service from a courier like FedEx Next Day, or a general term like Standard Shipping if you use multiple couriers and simply pick the cheapest. The Provider's name is what is displayed to customers during checkout, so choose something clear but concise. After a Provider name is set, you can configure costs. Setting <strong>Minimum shipping cost</strong> and <strong>Each additional item</strong> to $0.00 means free shipping for this Provider. We recommend setting the fallback <strong>All Other Regions</strong> to <strong>Disallowed.</strong></Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">Use the ISBN field to have a provider-specific ISBN for shipping sent to Bookmanager. For example, <strong>OS-STD</strong> could be used for your standard shipping provider, and <strong>OS-MED</strong> could be for Media Mail. This way, when orders drop into Bookmanager, the ISBN will make it clear which shipping provider the customer chose. You will need to edit the new OS- ISBN in Bookmanager to give it your shipping class and a receipt-friendly title. If left blank, the default 0 shipping ISBN will be sent.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">Regions with the same Provider settings will automatically be grouped together. This allows you to make Provider changes to a group of regions without having to do so on a per region basis. You can separate a Region from the group by clicking on one of the Regions in the grouping.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">By default, all products that a customer can normally browse or search for on your webstore will qualify for a shipping Provider. If you would like a Provider to only be offered for specific products, first create a <em>Browse Filter Preset</em> under the <strong>Purchasing → Browse menu.</strong> <em>Browse Filter Presets</em> can be configured to exclude products, which may be easier in terms of setup if you only wish to exclude a small selection of products. For example, if setting up Media Mail as a Provider, you can create a <em>Browse Filter Preset</em> that excludes your non-book BM classes instead of trying to include all your book classes.</Typography.Paragraph>\n <Multiship setChanged={setChanged} form={form} regions={ws[\"global:ws_multiship_json\"]} />\n </div>\n </Space>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Divider dashed />\n </>\n )}\n\n\n <div className={(multiship) ? \"disabled\" : \"\"}>\n\n {((!multiship || showMultishipInfo) &&\n <>\n {/* Shipping cost calculator */}\n <div id=\"cost_calculator\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n {(!(multiship) &&\n <div style={{ \"float\": \"right\", \"marginTop\": \"-3px\" }}>\n <Button onClick={() => setMultiship(!multiship)} type=\"primary\" size=\"small\"><small>Upgrade to multiple courier shipping</small></Button>\n </div>\n )}\n <Typography.Title level={5}>Shipping cost calculator</Typography.Title>\n <Typography.Paragraph type=\"secondary\">These options control how shipping costs are calculated for customers. \"All Other Regions\" is reserved as a fallback in case anyone tries to place an order for a shipping destination that doesn't match any of the criteria already set up. Similarily, you can add an entire country like \"Canada\" or \"United States\", and specify rules for more specific states or provinces by entering in \"Alaska\" or \"British Columbia\" in case there are exceptions. In the case that they enter something other than those two examples, the country itself will be considered the fallback. Use the Disallowed option to exclude a region from shipping, notifying your customer before they fully checkout that you do not ship to this region.</Typography.Paragraph>\n <Row gutter={[30, 30]}>\n {drawRegions(regions)}\n </Row>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text><strong>Add new region</strong> </Typography.Text>\n <div className=\"shim\"></div>\n <Typography.Paragraph type=\"secondary\">Add a new region by selecting a country (and region for US and CAN)</Typography.Paragraph>\n <AddRegion setUpdate={props.setUpdate} update={props.update} setRegions={props.setRegions} regions={regions} />\n {/* <AddRegion2 setUpdate={props.setUpdate} update={props.update} setRegions={props.setRegions} regions={regions} /> */}\n </div>\n </Space>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n\n </>\n )}\n\n </div>\n\n\n\n\n\n\n\n\n </div>\n\n\n\n </>\n )\n}","import React from \"react\";\nimport { Form, Typography, Divider, Row, Col, Space, Radio, Checkbox, Input } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nexport default function SearchingSection(props) {\n const { ws } = props;\n return (\n <>\n <div id=\"searching\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Searching</Typography.Title>\n <Divider />\n\n {/* Title search results will sort by default */}\n <div id=\"default_ts_sort\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Title search results will sort by default</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\"Availability” refers to search results always showing your On Hand or On Order titles first. “Popularity” prioritizes the most popular/ranked results, provided your store participates in the weekly sales reporting. “Preferred Pubstock suppliers” sorts by available titles, followed by those from your Yes or Favourite vendors, as determined in your Bookmanager software’s Pubstock Format menu.</Typography.Paragraph>\n <Form.Item initialValue={ws[\"global:default_ts_sort\"]} noStyle name=\"global:default_ts_sort\">\n <Radio.Group>\n <Radio value=\"onhand\">Sort by availability, then...<br />\n <div className=\"shim\"></div>\n <Form.Item initialValue={ws[\"global:ws_sort_pubstock\"]} noStyle name=\"global:ws_sort_pubstock\">\n <Radio.Group>\n <Radio value={0}>..sort by popularity.</Radio><br /><div className=\"shim\"></div>\n <Radio value={1}>..sort by titles that are carried by my preferred pubstock suppliers.</Radio><br /><div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </Radio><br /><div className=\"shim\"></div>\n <Radio value=\"demand\">Sort by title popularity regardless of my current stock levels.</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Title search results will sort by default */}\n <div id=\"ws_hide_no_stock\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Filter options</Typography.Title>\n <Typography.Text level={5}><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_hide_no_stock\"]) ? true : false} name=\"global:ws_hide_no_stock\" noStyle><Checkbox /></Form.Item>  <strong>Hide titles from search results that aren't carried by me or my preferred vendors.</strong>\n <Typography.Paragraph type=\"secondary\">\"Preferred\" vendors are ones that you denoted as Yes or Favourite in your Bookmanager software’s Pubstock Format menu.</Typography.Paragraph>\n </Typography.Text>\n <div className=\"shim\"></div>\n <Typography.Text level={5}><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_hide_ranks\"]) ? true : false} name=\"global:ws_hide_ranks\" noStyle><Checkbox /></Form.Item>  <strong>Hide sales ranks from being displayed to customers.</strong>\n <Typography.Paragraph type=\"secondary\">Sales ranks are populated from weekly sales / daily On Hand feeds gathered from participating Bookmanager stores. Check this box if you wish to hide this information from customers.</Typography.Paragraph>\n </Typography.Text>\n <div className=\"shim\"></div>\n <Typography.Text level={5}><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_tb_show_only_stocked\"]) ? true : false} name=\"global:ws_tb_show_only_stocked\" noStyle><Checkbox /></Form.Item>  <strong>Show customers only the titles I have On Hand or On Order</strong>\n <Typography.Paragraph type=\"secondary\">Check this box if you want your customers to only see search results that match your current On Hand, or On Order levels. Please note that when you are logged in with Store permissions, you will see all search results.</Typography.Paragraph>\n </Typography.Text>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Enable BM Class for consumers */}\n <div id=\"ws_enable_bm_class\" />\n <WebstoreItem\n name=\"global:ws_enable_bm_class\"\n value={(ws[\"global:ws_enable_bm_class\"]) ? true : false}\n heading=\"Enable BM Class for consumers\"\n description={<div>After enabling this option, proper setup in the Bookmanager software, and the Bookmanager Scheduler routines \"Send Onhands\" and \"Backup Bookmanager (option C)\" have been run, customers will have access to your Bookmanager software's F4 Class list for title filtering. <a href=\"https://support.bookmanager.com/tutorials/webstore/biz-admin-site/enabling-your-f4-classes-for-consumer-use-online/\" target=\"_blank\">Learn more about setting up your classes for this purpose.</a></div>}\n />\n\n <Divider dashed />\n {/* Local delivery postal or ZIP codes */}\n <div id=\"ws_bm_class_heading\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Class filters header</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Use this field to override the heading for the BM Class filters section. <strong>Categories</strong> is the default header.</Typography.Paragraph>\n <Form.Item help={<small>Max 20 chars</small>} name=\"global:ws_bm_class_heading\" initialValue={ws[\"global:ws_bm_class_heading\"]}>\n <Input placeholder=\"Filter name...\" maxLength={20} style={{ \"maxWidth\": \"500px\" }}></Input>\n </Form.Item>\n </div>\n </Space>\n </div>\n </>\n )\n}","import React from \"react\";\nimport { Form, Typography, Divider, Space, Radio, Checkbox, InputNumber } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nexport default function PricingSection(props) {\n\n const { ws } = props;\n\n\n const origin = (window.sitesettings.is_canadian) ? \"Canadian\" : \"American\";\n const currency_type = (window.sitesettings.is_canadian) ? \"CAD\" : \"USD\";\n\n\n return (\n <>\n <div id=\"pricing\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Pricing & Stock</Typography.Title>\n <Divider />\n\n {/* Available On Hand wording: */}\n <div id=\"ws_instore_instock\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Available On Hand wording:</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Choose the wording shown for titles that you have available On Hand (aOH). \"In stock\" may be preferable for webstores that don't have storefronts.</Typography.Paragraph>\n <Form.Item initialValue={(ws[\"global:ws_instore_instock\"]) ? true : false} noStyle name=\"global:ws_instore_instock\">\n <Radio.Group>\n <Radio value={false}>in store</Radio>\n <div className=\"shim\"></div>\n <Radio value={true}>in stock</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Cover display wording: */}\n <div id=\"ws_wording_hide_cover_nis_so\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Cover display wording:</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Choose to display \"not in stock\" when no onhand or onorder and \"sold out\" when onorder for the cover display.</Typography.Paragraph>\n <Form.Item initialValue={(ws[\"global:ws_wording_hide_cover_nis_so\"]) ? true : false} noStyle name=\"global:ws_wording_hide_cover_nis_so\">\n <Radio.Group>\n <Radio value={false}>Show</Radio>\n <div className=\"shim\"></div>\n <Radio value={true}>Hide</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n <Divider dashed />\n\n {/* Use custom On Hand conditions */}\n <div id=\"ws_use_onhand_conditions\"></div>\n <WebstoreItem\n name=\"global:ws_use_onhand_conditions\"\n value={(ws[\"global:ws_use_onhand_conditions\"]) ? true : false}\n heading=\"Use custom On Hand conditions\"\n description={<div>Current condition codes:<br />\n\n {window.sitesettings.condition_codes.map(item => {\n if (item.code) {\n return <>{item.code}: {item.name} <br /></>\n }\n })}\n <br />If you have enabled custom On Hand conditions (bargain, used, signed, etc.) in your Bookmanager software, checking this box will allow those books to be visible on your Webstore</div>}\n />\n\n<Divider dashed />\n <div id=\"ws_hide_matching_new_price_condition\"></div>\n {/* Hide listing and cart for regular (new) titles if non-regular stock exists at the same price */}\n <WebstoreItem\n name=\"global:ws_hide_matching_new_price_condition\"\n value={(ws[\"global:ws_hide_matching_new_price_condition\"]) ? true : false}\n heading=\"Hide listing and cart for regular (new) titles if non-regular stock exists at the same price\"\n description={<div>When this box is unchecked, the consumer can choose from any of multiple stock conditions having the same price to add to their cart. When checked, the regular condition cart will be hidden only if there are non-regular condition books available for the new price. An example use of this option would be if you sell signed or promotional books for the same price as a new book, but don't want customers to have the option to buy regular (new) unsigned books.</div>}\n />\n <Divider dashed />\n\n {/* Stock */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Stock</Typography.Title>\n <Form.Item initialValue={ws[\"global:ws_show_qty\"]} noStyle name=\"global:ws_show_qty\">\n <Radio.Group>\n <Radio value={2}>Show stock quantities to customers</Radio>\n <div className=\"shim\"></div>\n <Radio value={1}>Show 25+ if the quantity is over 25</Radio>\n <div className=\"shim\"></div>\n <Radio value={0}>Don't show stock quantities <div style={{ \"lineHeight\": \"12px\", \"color\": \"#f00\" }}><small>If you enable this setting and hide stock quantities from your site, customers <strong><em>will</em></strong> be able to order more than what you have on hand or on order.</small></div></Radio>\n <div className=\"shim\"></div>\n <Radio value={3}>Don't show stock quantities, In Store/Stock Now, or On Order indicators. Instead, all titles on hand, on order, and available to order will display 'Available to order' or 'Special Order'.</Radio>\n <div className=\"shim\"></div>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n\n {/* Minimum profit margin */}\n <div id=\"ws_minimum_margin\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Minimum profit margin: \n <Form.Item initialValue={ws[\"global:ws_minimum_margin\"]} noStyle name=\"global:ws_minimum_margin\">\n <InputNumber max={100} precision={0} />\n </Form.Item>\n </Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n This setting is a fallback for when a Pubstock <strong>vendor code</strong> has been enabled for consumer Webstore use (the code is set to <strong>Yes</strong> or <strong>Fav</strong> in the Bookmanager software), but you have yet to add that code to the <strong>3 Suppliers</strong> area in Bookmanager. This setting only takes effect in that rare case, and if the title being quoted to a customer for order has a short discount.\n </Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">\n Set this value to 1% lower than your main Currency Code's <strong>SDMargin</strong> is set in Bookmanager. For example, if your US Currency Code in Bookmanager has an SDMargin set to 25%, then you should set this online Minimum Profit Margin field to 24%. Even if there are exceptions to this rule, in the case where you have a special utility Currency Code with an SDMargin of 0, you should still set a non-zero fallback for the webstore, one percent lower than your general default SDMargin. Setting your online Minimum Profit Margin to the same value or higher than your software's default SDMargin can result in inconsistent sell prices between Bookmanager and the consumer Webstore.\n </Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n\n {/* Minimum Order */}\n <div id=\"order_min\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Minimum order subtotal: \n <Form.Item initialValue={ws[\"global:order_min\"]} noStyle name=\"global:order_min\">\n <InputNumber precision={2} />\n </Form.Item>\n </Typography.Title>\n <Typography.Paragraph type=\"secondary\">Checkout will be disabled if order subtotal does not meet or exceed this threshold.</Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n\n {/* Display list prices */}\n <div id=\"ws_show_ca_us_list_prices\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Display list prices</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Enable if you would like to display either the US or Canadian list prices (or both) to your customers alongside your sell prices. List prices will be displayed while browsing and on the product details page. This option is usually for wholesalers or those selling below list price for the majority of their stock. <em>Not all titles have list prices provided to us from publishers.</em></Typography.Paragraph>\n <Form.Item initialValue={ws[\"global:ws_show_ca_us_list_prices\"]} name=\"global:ws_show_ca_us_list_prices\" noStyle>\n <Radio.Group>\n <Radio value=\"both\">Both</Radio>\n <div className=\"shim\" />\n <Radio value=\"usa\">US</Radio>\n <div className=\"shim\" />\n <Radio value=\"can\">CAN</Radio>\n <div className=\"shim\" />\n <Radio value=\"none\">None</Radio>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n\n {/* Add strikethrough to list prices */}\n <div id=\"ws_strikethrough\"></div>\n <WebstoreItem\n name=\"global:ws_strikethrough\"\n value={(ws[\"global:ws_strikethrough\"]) ? true : false}\n heading=\"Add strikethrough to list prices\"\n description={<div>When checked, a strike-through will be displayed over the list price when the available sell price is lower than the list price. This will act as a visual cue to customers to help show they are not paying the higher list price.</div>}\n />\n\n <Divider dashed />\n\n {/* Private webstore */}\n <div id=\"ws_hide_sale_pricing\"></div>\n <WebstoreItem\n name=\"global:ws_hide_sale_pricing\"\n value={(ws[\"global:ws_hide_sale_pricing\"]) ? true : false}\n heading=\"Hide sale pricing from product details page\"\n description={<div>Enable this to hide the automatic \"You save\" sale price comparison text that is displayed when viewing the product details page for items that have a sell price below your original / list price. Most stores should not enable this option, as letting customers know their savings for items that are selling below the original / list price is desired and draws attention to items on sale.</div>}\n />\n\n <Divider dashed />\n\n {/* Online price calculation for orders */}\n <div id=\"ws_price_estimate_strategy\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Online price calculation for orders</Typography.Title>\n <Typography.Paragraph type=\"secondary\">Choose how pricing will be determined for product that is not On Hand but can be ordered. These rules are used to choose which vendor pricing and availability to use when there are multiple sources to choose from. For example, if a product is available from both a US and a Canadian source, both of which use different currency exchanges and markups, these rules determine which source will be quoted.</Typography.Paragraph>\n <Form.Item initialValue={ws[\"global:ws_price_estimate_strategy\"]} noStyle name=\"global:ws_price_estimate_strategy\">\n <Radio.Group>\n <Radio value={0}>\n Least price aggressive\n <Typography.Paragraph type=\"secondary\">Show the customer the lowest {currency_type} list price, else lowest “after markup” price, and then the expected delivery time associated with the supplier having the lowest cost. Even if the product is available cheaper from a foreign source, your {origin} sources will be given priority.</Typography.Paragraph>\n </Radio>\n <div className=\"shim\"></div>\n <Radio value={2}>\n More Price Aggressive\n <Typography.Paragraph type=\"secondary\">Show the customer the lowest “after markup” price and the expected delivery time associated with the supplier having the lowest cost. Regardless of currency or source, your customer will be quoted the lowest price that conforms to your markup and profit margin rules set for that supplier.</Typography.Paragraph>\n </Radio>\n <div className=\"shim\"></div>\n <Radio value={3}>\n Prioritize delivery time\n <Typography.Paragraph type=\"secondary\">Show the customer the fastest delivery time and price associated with the fastest delivery time, which may result in a lower profit margin or a higher price. In most cases the fastest source will also be able to quote the lowest (or same) price, so this option may seem redundant. However, if a book is available from multiple sources and at different prices, costs and delivery times, you need to decide what to offer customers. Price is important but so is time. For example, a wholesaler may be able to deliver a book faster but at a short discount, which will result in a low margin and/or a higher price if you also markup prices to reflect a minimum margin. Use the fastest delivery time option if you consider speed to be the most important factor.</Typography.Paragraph>\n </Radio>\n </Radio.Group>\n </Form.Item>\n </div>\n </Space>\n\n <Divider dashed />\n\n\n {/* Add strikethrough to list prices */}\n <div id=\"ws_strikethrough\"></div>\n <WebstoreItem\n name=\"global:using_promo_codes\"\n value={(ws[\"global:using_promo_codes\"]) ? true : false}\n heading=\"Enable sales promotions & promo codes\"\n description={<div>When checked, the website will automatically add any sales and promotions as well as let visitors enter promo codes.</div>}\n />\n\n <Divider dashed />\n\n\n {/*Customer discounts */}\n <div id=\"ws_online_discount\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Customer discounts</Typography.Title>\n <Typography.Text><strong>Online discount </strong>\n <Form.Item initialValue={ws[\"global:ws_online_discount\"]} noStyle name=\"global:ws_online_discount\">\n <InputNumber formatter={(value) => parseInt(value) || 0} min={0} max={100} precision={0} />\n </Form.Item>\n </Typography.Text>\n <Typography.Paragraph type=\"secondary\">The online price quoted for customers will use your selection from the Online Pricing option, less this discount, but only if the discounted price yields at least the minimum profit margin value. This setting is particularily useful if you have a special \"Web-only\" type of promotion.</Typography.Paragraph>\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_cust_disc_flags\"].discount_new) ? true : false} name={[\"global:ws_cust_disc_flags\", \"discount_new\"]} noStyle>\n <Checkbox>Use customer's discount stored in Bookmanager for new books...\n <br />\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_cust_disc_flags\"].discount_new_except_nt) ? true : false} name={[\"global:ws_cust_disc_flags\", \"discount_new_except_nt\"]} noStyle>\n <Checkbox>except if the the title's discount is NT</Checkbox>\n </Form.Item>\n </Checkbox>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_cust_disc_flags\"].discount_non_new) ? true : false} name={[\"global:ws_cust_disc_flags\", \"discount_non_new\"]} noStyle>\n <Checkbox>Use customer's discount stored in Bookmanager for non-new books with condition codes...\n <br />\n <Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_cust_disc_flags\"].discount_non_new_except_nt) ? true : false} name={[\"global:ws_cust_disc_flags\", \"discount_non_new_except_nt\"]} noStyle>\n <Checkbox>except if the the title's discount is NT</Checkbox>\n </Form.Item>\n </Checkbox>\n </Form.Item>\n </div>\n </Space>\n\n\n <Divider dashed />\n\n\n\n\n\n\n </div>\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Form, Typography, Divider, Input, Col, Space, Checkbox, Radio, Tabs, Select } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nimport conditional from \"../../../utils/conditional\";\nimport MSWrap from \"./MSWrap\";\nimport { drawMSFooter, drawMSTitleBar } from \"../../../utils/Utils\";\nimport MultistoreItem from \"../MultistoreItem\";\nexport default function PaymentsSection(props) {\n\n const { ws, form, setChanged = () => { } } = props;\n\n const [method, setMethod] = useState(ws[\"global:ws_credit_card_method\"]);\n\n const primary = (window.sitesettings.stores[0]);\n const stores = (primary.is_primary) ? window.sitesettings.stores : [window.sitesettings.stores.find(item => item.is_primary)];\n\n\n const setCreditCardMethod = (_method) => {\n\n setChanged(true);\n\n switch (_method) {\n case \"none\":\n form.setFieldsValue({\n \"global:ws_credit_card_in_store\": false,\n \"global:ws_credit_card_clearent\": false,\n \"global:ws_credit_card_global\": false\n });\n setMethod(\"none\");\n break;\n case \"in_store\":\n form.setFieldsValue({\n \"global:ws_credit_card_in_store\": true,\n \"global:ws_credit_card_clearent\": false,\n \"global:ws_credit_card_global\": false\n });\n setMethod(\"in_store\");\n break;\n case \"clearent\":\n form.setFieldsValue({\n \"global:ws_credit_card_in_store\": false,\n \"global:ws_credit_card_clearent\": true,\n \"global:ws_credit_card_global\": false\n });\n setMethod(\"clearent\");\n break;\n case \"global\":\n form.setFieldsValue({\n \"global:ws_credit_card_in_store\": false,\n \"global:ws_credit_card_clearent\": false,\n \"global:ws_credit_card_global\": true\n });\n setMethod(\"global\");\n break;\n default:\n form.setFieldsValue({\n \"global:ws_credit_card_in_store\": false,\n \"global:ws_credit_card_clearent\": false,\n \"global:ws_credit_card_global\": false\n });\n setMethod(\"none\")\n break;\n }\n\n\n }\n\n const [l, setL] = useState((ws[\"global:ws_custom_contact_payment_text\"].length) ? ws[\"global:ws_custom_contact_payment_text\"].length : 22);\n\n return (\n <>\n <div id=\"payments\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Payments</Typography.Title>\n <Divider />\n\n\n\n {/* Pay at pick up */}\n <div id=\"ws_accepts_payment_pickup\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_accepts_payment_pickup\"\n heading=\"Enable pay at pick up\"\n description={<div>Allow customers to choose \"I will pay when I pick up the order\" on the \"Pick up at store\" cart checkout page. We highly recommend enabling this option, as it gives a convenience and competitive edge that larger online retailers cannot offer. In our experience, the vast majority of online customers choose this option when checking out, and 99% of these orders are picked up and paid for with no issue. It is very rare for a customer to place an order for pickup and not actually follow through.</div>}\n />\n <Divider dashed />\n\n {/* Contact for payment */}\n <div id=\"ws_accepts_payment_contact\" />\n <MultistoreItem\n stores={stores}\n ws={ws}\n name=\"ws_accepts_payment_contact\"\n heading=\"Enable contact for payment\"\n description={<div>Allow customers to choose \"Contact me for payment\" on the cart checkout page. This payment option does not require the customer to prepay at checkout. This option is available for both in-store pickup and shipped orders.</div>}\n />\n <Divider dashed />\n\n <Space align=\"baseline\">\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <h5 class=\"ant-typography\">Override \"Contact for payment\" wording</h5>\n <Typography.Paragraph type=\"secondary\">You can allow customers to choose \"Contact me for payment\" during checkout. This payment option does not require the customer to prepay at checkout. This option is available for in-store pick up, Guest Checkout, and shipped orders (whichever applicable). If you would like to customize the text of this payment option, use the field below.</Typography.Paragraph>\n <Space>\n <div style={{ \"width\": \"400px\" }}>\n <Form.Item noStyle initialValue={(ws[\"global:ws_custom_contact_payment_text\"]) ? ws[\"global:ws_custom_contact_payment_text\"] : \"Contact me for payment\"} name=\"global:ws_custom_contact_payment_text\">\n <Input onChange={(e) => setL(e.target.value.length)} maxLength={40} style={{ \"maxWidth\": \"500px\" }}></Input>\n </Form.Item>\n </div>\n <Typography.Paragraph type=\"secondary\">{l} / 40</Typography.Paragraph>\n </Space>\n <div className=\"shim\"></div>\n <Typography.Paragraph type=\"secondary\">Default Value of \"Contact me for payment\". Limit of 40 characters.</Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Pay at pick up */}\n <div id=\"ws_accepts_paypal\"></div>\n <WebstoreItem\n name=\"global:ws_accepts_paypal\"\n value={(ws[\"global:ws_accepts_paypal\"]) ? true : false}\n heading=\"PayPal setup\"\n />\n <div className=\"shim\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <conditional.true value={(ws[\"global:ws_paypal_email\"])}>\n <Typography.Text><strong>PayPal email address </strong>\n <Typography.Paragraph type=\"secondary\">Email address your business' PayPal account was set up with.</Typography.Paragraph>\n <Form.Item help={<small>If this email is incorrect, please contact Bookmanager.</small>} rules={[{ type: \"email\", message: \"Must be a valid email.\" }]} initialValue={ws[\"global:ws_paypal_email\"]} name=\"global:ws_paypal_email\">\n <Input disabled size=\"small\" style={{ \"maxWidth\": \"300px\" }}></Input>\n </Form.Item>\n <div className=\"shim\" />\n </Typography.Text>\n </conditional.true>\n <Typography.Paragraph><strong>Paypal client id </strong>\n <div className=\"shim\"></div>\n <Form.Item initialValue={ws[\"global:ws_paypal_client_id\"]} name=\"global:ws_paypal_client_id\" noStyle>\n <Input.TextArea maxLength={80} showCount size=\"small\" style={{ \"maxWidth\": \"500px\" }}></Input.TextArea>\n </Form.Item>\n </Typography.Paragraph>\n <Typography.Paragraph><strong>Paypal secret </strong>\n <div className=\"shim\"></div>\n <Form.Item initialValue={ws[\"global:ws_paypal_secret\"]} name=\"global:ws_paypal_secret\" noStyle>\n <Input.TextArea maxLength={80} showCount size=\"small\" style={{ \"maxWidth\": \"500px\" }}></Input.TextArea>\n </Form.Item>\n </Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">For instructions on where to find the Client ID and Secret, <a target={\"_blank\"} href=\"https://cdn1.bookmanager.com/i/tbm/www/New_PayPal_Setup.html\">click here.</a></Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n\n <div style={{ \"marginLeft\": \"40px\" }}>\n <h5 class=\"ant-typography\">Webstore credit card collection</h5>\n <Select onChange={(e) => setCreditCardMethod(e)} value={method} style={{ \"width\": \"400px\" }} >\n <Select.Option key={\"none\"} value={\"none\"} >Don't Collect <em><small>(remove credit card option from webstore)</small></em></Select.Option>\n <Select.Option key={\"in_store\"} value={\"in_store\"} >Collect Credit Card Number <em><small>(for in-store processing)</small></em></Select.Option>\n {(!window.sitesettings.is_canadian && <Select.Option key={\"clearent\"} value={\"clearent\"} >Collect Clearent Token <em><small>(for integrated in-store processing)</small></em></Select.Option>)}\n {(window.sitesettings.is_canadian && <Select.Option key={\"global\"} value={\"global\"} >Collect Global Payments Token <em><small>(integrated)</small></em></Select.Option>)}\n </Select>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Form.Item hidden name={\"global:ws_credit_card_in_store\"} />\n <Form.Item hidden name={\"global:ws_credit_card_clearent\"} />\n <Form.Item hidden name={\"global:ws_credit_card_global\"} />\n </div>\n\n <conditional.true value={(method === \"in_store\")}>\n {/* Enable in-store credit card processing */}\n <div id=\"ws_credit_card_in_store\"></div>\n <WebstoreItem\n name=\"global:ws_credit_card_in_store\"\n has_switch={false}\n value={(ws[\"global:ws_credit_card_in_store\"]) ? true : false}\n heading=\"In-store credit card processing setup\"\n notice=\"IMPORTANT: You must enable the option ‘Submitted orders will automatically generate a Held Sale in my Bookmanager system’ (in the Ordering section) to use this option.\"\n description={<div>Enabling in-store credit card processing will allow your customers to provide credit card details for a transaction. Those details will be encrypted and passed to your Bookmanager software, where a non-recoverable password is required to decrypt the credit card information. It is then up to you to process the transaction manually at your store with the details provided. Credit card details will not be stored on Bookmanager servers or sent by email. Your local copy of Bookmanager is the only place credit cards are stored, with details securely encrypted.</div>}\n />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Text ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc_shipping\"]) ? true : false} name=\"global:ws_accepts_cc_shipping\" noStyle><Checkbox disabled={(!props.autoHeldSale || !ws[\"global:can_credit_card_in_store\"])} /></Form.Item>  Enable Credit Card payments on orders to be <strong>Shipped</strong></Typography.Text><br />\n <conditional.true value={((!ws[\"global:can_credit_card_in_store\"]))}><Typography.Text type=\"danger\">Some additional setup in BM is required to enable this setting online. Please call Bookmanager support for help with this.</Typography.Text><br /></conditional.true>\n <conditional.true value={((!props.autoHeldSale))}><Typography.Text type=\"danger\">\"Submitted orders will auto generate a Held Sale in Bookmanager\" must be enabled.</Typography.Text><br /></conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc_pickup\"]) ? true : false} name=\"global:ws_accepts_cc_pickup\" noStyle><Checkbox disabled={(!props.autoHeldSale || !ws[\"global:can_credit_card_in_store\"])} /></Form.Item>  Enable Credit Card payments on orders to be <strong>Picked Up</strong></Typography.Text><br />\n <conditional.true value={((!ws[\"global:can_credit_card_in_store\"]))}><Typography.Text type=\"danger\">Some additional setup in BM is required to enable this setting online. Please call Bookmanager support for help with this.</Typography.Text><br /></conditional.true>\n <conditional.true value={((!props.autoHeldSale))}><Typography.Text type=\"danger\">\"Submitted orders will auto generate a Held Sale in Bookmanager\" must be enabled.</Typography.Text><br /></conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Paragraph ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_disallow_cc_debit\"]) ? true : false} name={\"global:ws_disallow_cc_debit\"} noStyle><Checkbox /></Form.Item>  Disallow debit credit cards <div className=\"shim\" /><small>(Checking will disallow debit credit cards transactions for your customers.)</small></Typography.Paragraph>\n <Divider style={{ \"margin\": \"10px 0px\" }} dashed />\n <Typography.Paragraph ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc\"].visa) ? true : false} name={[\"global:ws_accepts_cc\", \"visa\"]} noStyle><Checkbox /></Form.Item>  VISA</Typography.Paragraph>\n <Typography.Paragraph ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc\"].mastercard) ? true : false} name={[\"global:ws_accepts_cc\", \"mastercard\"]} noStyle><Checkbox /></Form.Item>  MasterCard</Typography.Paragraph>\n <Typography.Paragraph ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc\"].amex) ? true : false} name={[\"global:ws_accepts_cc\", \"amex\"]} noStyle><Checkbox /></Form.Item>  American Express</Typography.Paragraph>\n <Typography.Paragraph ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc\"].discover) ? true : false} name={[\"global:ws_accepts_cc\", \"discover\"]} noStyle><Checkbox /></Form.Item>  Discover</Typography.Paragraph>\n </div>\n </Space>\n </conditional.true>\n\n {/* Disabled for now */}\n <conditional.true value={(method === \"clearent\")}>\n <conditional.true value={(!window.sitesettings.is_canadian)}>\n <div>\n {/* Pay at pick up */}\n <div id=\"ws_credit_card_clearent\"></div>\n <WebstoreItem\n has_switch={false}\n name=\"global:ws_credit_card_clearent\"\n value={(ws[\"global:ws_credit_card_clearent\"]) ? true : false}\n heading=\"Clearent\"\n description={<>If you use Clearent in-store to process payments, you can also enable them here to facilitate payments on your consumer Webstore. Clearent integration will not send actual credit card numbers into your Bookmanager software, but instead pass along tokens that can only be used by your store. Tokens hugely reduce liability, and are useless to anyone but your store's specific merchant account with Clearent. A token-based system means staff will never see customer credit card details, giving both merchants and customers superior security and peace of mind.\n <br /> <br />\n <strong>Payment is NOT processed automatically at the time the customer checks out. Tokens are used in your in-store copy of Bookmanager to process the final payment, and must be manually processed by staff.</strong>\n <br /> <br />\n <strong><a href=\"mailto:mail@bookmanager.com\"> If you would like to enable tokens, please contact Bookmanager so they can register your domain name through Clearent. </a></strong>\n <div className=\"shim\" /><div className=\"shim\" />\n </>}\n />\n {/* Tokens can be authorized for a one-time use, or for multiple uses if the customer wishes to keep their credit card on file for future purchases. */}\n <div className=\"shim\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div style={{ \"width\": \"430px\" }}>\n <Typography.Paragraph><strong>Public Key </strong>\n <div className=\"shim\"></div>\n {/* <ValidateClearent key={ws[\"ws_clearent_public_key\"]} /> */}\n <Form.Item initialValue={ws[\"global:ws_clearent_public_key\"]} name=\"global:ws_clearent_public_key\" noStyle>\n <Input.TextArea placeholder=\"Public Key...\" size=\"small\" rows={6} style={{ \"maxWidth\": \"500px\" }}></Input.TextArea>\n </Form.Item>\n </Typography.Paragraph>\n <div className=\"shim\"></div>\n <Typography.Text ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc_shipping\"]) ? true : false} name=\"global:ws_accepts_cc_shipping\" noStyle><Checkbox disabled={(!props.autoHeldSale)} /></Form.Item>  Enable Credit Card payments on orders to be <strong>Shipped</strong></Typography.Text><br />\n <conditional.true value={((!props.autoHeldSale))}><Typography.Text type=\"danger\">\"Submitted orders will auto generate a Held Sale in Bookmanager\" must be enabled.</Typography.Text><br /></conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc_pickup\"]) ? true : false} name=\"global:ws_accepts_cc_pickup\" noStyle><Checkbox disabled={(!props.autoHeldSale)} /></Form.Item>  Enable Credit Card payments on orders to be <strong>Picked Up</strong></Typography.Text><br />\n <conditional.true value={((!props.autoHeldSale))}><Typography.Text type=\"danger\">\"Submitted orders will auto generate a Held Sale in Bookmanager\" must be enabled.</Typography.Text><br /></conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <div className=\"shim\"></div>\n <span style={{ \"color\": \"#f00\" }}>Once your Public Key is set, we highly recommend submitting a test order online, then processing that transaction fully in the Bookmanager software to ensure everything is working properly. This process will also make sure you know how to process a refund / void.</span>\n <div className=\"shim\"></div>\n <div className=\"shim\"></div> <div className=\"shim\"></div>\n </div>\n </Space>\n </div>\n </conditional.true>\n </conditional.true>\n <conditional.true value={(window.sitesettings.is_canadian)}>\n <conditional.true value={(method === \"global\")}>\n <div>\n {/* Pay at pick up */}\n <div id=\"ws_credit_card_global\"></div>\n <WebstoreItem\n name=\"global:ws_credit_card_global\"\n has_switch={false}\n value={(ws[\"global:ws_credit_card_global\"]) ? true : false}\n heading=\"Global Payments\"\n description={<>\n If you use Global Payments in-store to process payments, you can also enable them here to facilitate payments on your consumer Webstore. Global Payments integration will not send actual credit card numbers into your Bookmanager software, but instead pass along tokens that can only be used by your store. Tokens hugely reduce liability, and are useless to anyone but your store's specific merchant account with Global Payments. A token-based system means staff will never see customer credit card details, giving both merchants and customers superior security and peace of mind.\n <br /><br />\n <strong>Payment is NOT processed automatically at the time the customer checks out. Tokens are used in your in-store copy of Bookmanager to process the final payment, and must be manually processed by staff.</strong>\n <br /><br />\n <div><strong><a style={{ \"color\": \"#f00\" }} href=\"mailto:mail@bookmanager.com\">Contact Bookmanager to obtain your public and private keys. </a></strong></div>\n\n </>}\n />\n {/* Tokens can be authorized for a one-time use, or for multiple uses if the customer wishes to keep their credit card on file for future purchases. */}\n <div className=\"shim\" />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div style={{ \"width\": \"430px\" }}>\n <Typography.Paragraph><strong>Public Key </strong>\n <div className=\"shim\"></div>\n {stores.map(item => {\n let _key = \"ms\" + item.store_number + \":ws_global_pubkey\";\n return (\n <div>\n <em style={{ \"opacity\": \"0.7\" }}>{item.name}</em>\n <Form.Item initialValue={ws[_key]} name={_key} noStyle>\n <Input placeholder=\"Public Key...\" size=\"middle\" style={{ \"width\": \"530px\" }}></Input>\n </Form.Item>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n )\n })}\n\n </Typography.Paragraph>\n <Typography.Paragraph><strong>Private Key </strong>\n <div className=\"shim\"></div>\n {stores.map(item => {\n let _key = \"ms\" + item.store_number + \":ws_global_privkey\";\n return (\n <div>\n <em style={{ \"opacity\": \"0.7\" }}>{item.name}</em>\n <Form.Item initialValue={ws[_key]} name={_key} noStyle>\n <Input placeholder=\"Private Key...\" size=\"middle\" style={{ \"width\": \"530px\" }}></Input>\n </Form.Item>\n <div className=\"shim\" /><div className=\"shim\" />\n </div>\n )\n })}\n\n </Typography.Paragraph>\n <div className=\"shim\"></div>\n <Typography.Text ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc_shipping\"]) ? true : false} name=\"global:ws_accepts_cc_shipping\" noStyle><Checkbox disabled={(!props.autoHeldSale)} /></Form.Item>  Enable Credit Card payments on orders to be <strong>Shipped</strong></Typography.Text><br />\n <conditional.true value={((!props.autoHeldSale))}><Typography.Text type=\"danger\">\"Submitted orders will auto generate a Held Sale in Bookmanager\" must be enabled.</Typography.Text><br /></conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text ><Form.Item valuePropName='checked' initialValue={(ws[\"global:ws_accepts_cc_pickup\"]) ? true : false} name=\"global:ws_accepts_cc_pickup\" noStyle><Checkbox disabled={(!props.autoHeldSale)} /></Form.Item>  Enable Credit Card payments on orders to be <strong>Picked Up</strong></Typography.Text><br />\n <conditional.true value={((!props.autoHeldSale))}><Typography.Text type=\"danger\">\"Submitted orders will auto generate a Held Sale in Bookmanager\" must be enabled.</Typography.Text><br /></conditional.true>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n <div className=\"shim\"></div>\n\n <span style={{ \"color\": \"#f00\" }}>Once your Public and Private Keys are set, we highly recommend submitting a test order online, then processing that transaction fully in the Bookmanager software to ensure everything is working properly. This process will also make sure you know how to process a refund / void.</span>\n <div className=\"shim\"></div>\n \n <div className=\"shim\"></div> <div className=\"shim\"></div>\n {/* <Typography.Paragraph type=\"secondary\">For instructions on where to find the API Key and Merchant ID, <a target={\"_blank\"} href=\"https://clearent.com/getting-started/\">click here.</a></Typography.Paragraph> */}\n </div>\n </Space>\n </div>\n </conditional.true>\n </conditional.true>\n </div>\n </>\n )\n}","import React from \"react\";\nimport {TimePicker } from \"antd\";\nimport moment from \"moment\";\n\nexport default function FormatPicker(props) {\n\n const { value, onChange, disabled = false } = props;\n const triggerChange = (_val) => {\n onChange(_val.hour()*60 + _val.minutes());\n }\n\n return (\n <> \n <TimePicker disabled={disabled} onChange={(_val) => triggerChange(_val)} defaultValue={moment.utc().startOf('day').add({ minutes: value })} format=\"h:mm A\" use12Hours />\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Form, Row, Col, Checkbox, DatePicker, Typography, Divider, Input, Button, Select, Table } from \"antd\";\nimport { CloseOutlined } from '@ant-design/icons';\nimport moment from \"moment\";\nimport FormatPicker from \"./sections/FormatPicker\";\nexport default function Hours(props) {\n\n const {setChanged = () => {}} = props; \n\n const [data, setData] = useState(props.data);\n const [updated, setUpdated] = useState(false);\n const drawStores = (_stores) => {\n return _stores.map((item, index) => { return drawStore(item, index) })\n }\n\n \n\n const drawStore = (_store, _index) => {\n return (\n <div key={_index}>\n <Typography.Title level={5}>{_store.store}</Typography.Title>\n <Form.Item name={[\"global:global:ws_hours\", [_store.store_san], \"title\"]} initialValue={_store.title}>\n <Input maxLength={100} style={{ \"maxWidth\": \"500px\" }} />\n </Form.Item>\n\n {drawWeekdays(_store.hours, _store.store_san, _index)}\n <div style={{ \"width\": \"500px\" }}><Divider dashed /></div>\n {drawExceptions(_store.exceptions, _store.store_san, _index)}\n <div style={{ \"width\": \"500px\" }}><Divider dashed /></div>\n </div>\n )\n }\n\n const drawWeekdays = (_days, _ind, pos) => {\n let m = [];\n _days.forEach((_day, _index) => {\n m.push({\n key: _index,\n day: <div>{_day.weekday}</div>,\n open: <Form.Item noStyle valuePropName='checked' initialValue={(_day.open)} name={[\"global:ws_hours\", [_ind], \"hours\", [_index], \"open\"]}><Checkbox onChange={(e) => { updateOpen(pos, \"hours\", [_index], e.target.checked)}} /></Form.Item>,\n start: <Form.Item noStyle valuePropName=\"value\" name={[\"global:ws_hours\", [_ind], \"hours\", [_index], \"start\"]} initialValue={_day.start}><FormatPicker disabled={!data[pos][\"hours\"][_index][\"open\"]} /></Form.Item>,\n end: <Form.Item noStyle name={[\"global:ws_hours\", [_ind], \"hours\", [_index], \"end\"]} initialValue={_day.end}><FormatPicker disabled={!data[pos][\"hours\"][_index][\"open\"]} /></Form.Item>,\n });\n })\n\n const columns = [\n { title: 'Day', dataIndex: 'day', key: 'day' },\n { title: 'Open', dataIndex: 'open', key: 'open' },\n { title: 'Open at', dataIndex: 'start', key: 'start' },\n { title: 'Close at', dataIndex: 'end', key: 'end' },\n ];\n\n return (\n <>\n <Table style={{ \"maxWidth\": \"500px\" }} pagination={false} size=\"small\" bordered dataSource={m} columns={columns} />\n </>\n );\n\n }\n\n const drawAddDate = (_ind, pos) => {\n return (\n <>\n <div style={{\"cursor\" : \"pointer\"}}>\n <DatePicker style={{ \"cursor\": \"pointer\" }} onSelect={(e) => addException(_ind, e, pos)} suffixIcon={<Button style={{ \"cursor\": \"pointer\", \"position\": \"relative\", \"left\": \"-110px\" }} type=\"primary\" size=\"small\"><small>Add special date</small></Button>} placeholder=\"\" allowClear={false} inputReadOnly bordered={false} ></DatePicker>\n </div>\n </>\n )\n }\n\n const addException = (_ind, e, pos) => {\n let obj = {\n \"day\": e.date(),\n \"month\": e.month() + 1,\n \"open\": true,\n \"start\": 0,\n \"end\": 0\n }\n let d = data;\n d[pos].exceptions.push(obj);\n setData(d);\n setUpdated(!updated);\n setChanged(true);\n\n }\n\n const removeException = (_ind, _index, pos) => {\n let d = data;\n delete d[pos].exceptions[_index];\n setData(d);\n setUpdated(!updated);\n setChanged(true);\n }\n\n const updateOpen = (p1, p2, p3, _val) => {\n\n let d = [...data]\n d[p1][p2][p3][\"open\"] = _val;\n setData(d);\n \n //hours\n\n //exceptions\n\n\n\n }\n\n const drawExceptions = (_days, _ind, pos) => {\n\n let m = [];\n\n _days.forEach((_day, _index) => {\n \n let d = _day.month + \"/\" + _day.day + \"/\" + moment().format(\"YYYY\");\n var month = moment(d).format('MMMM');\n var date = moment(d).format('Do');\n console.log(\"EXCEPTION\" + _day.start);\n m.push({\n key: _index,\n day: <div><Form.Item noStyle initialValue={_day.month} name={[\"global:ws_hours\", [_ind], \"exceptions\", [_index], \"month\"]} hidden /><Form.Item initialValue={_day.day} name={[\"global:ws_hours\", [_ind], \"exceptions\", [_index], \"day\"]} hidden />{month} {date}</div>,\n open: <Form.Item noStyle valuePropName='checked' initialValue={(_day.open)} name={[\"global:ws_hours\", [_ind], \"exceptions\", [_index], \"open\"]}><Checkbox checked={_day.open} onChange={(e) => { updateOpen(pos, \"exceptions\", [_index], e.target.checked)}} /></Form.Item>,\n start: <Form.Item noStyle initialValue={(_day.start)} name={[\"global:ws_hours\", [_ind], \"exceptions\", [_index], \"start\"]}><FormatPicker disabled={!data[pos][\"exceptions\"][_index][\"open\"]}/></Form.Item>,\n end: <Form.Item noStyle initialValue={(_day.end)} name={[\"global:ws_hours\", [_ind], \"exceptions\", [_index], \"end\"]}><FormatPicker disabled={!data[pos][\"exceptions\"][_index][\"open\"]} /></Form.Item>,\n remove: <div style={{ \"textAlign\": \"center\" }}><Button onClick={() => removeException(_ind, _index, pos)} size=\"small\" icon={<CloseOutlined style={{ \"fontSize\": \"12px\", \"color\": \"#888\" }} />} shape=\"circle\" /></div>\n });\n })\n\n const columns = [\n { title: 'Day', dataIndex: 'day', key: 'day' },\n { title: 'Open', dataIndex: 'open', key: 'open' },\n { title: 'Open at', dataIndex: 'start', key: 'start' },\n { title: 'Close at', dataIndex: 'end', key: 'end' },\n { title: <></>, dataIndex: 'remove', key: 'remove' },\n ];\n\n return (\n <>\n\n <Table footer={() => drawAddDate(_ind, pos)} style={{ \"maxWidth\": \"500px\" }} pagination={false} size=\"small\" bordered dataSource={m} columns={columns} />\n </>\n );\n\n }\n\n return (\n <>\n {drawStores(data)}\n </>\n );\n\n}\n","import React from \"react\";\nimport { Typography, Divider, Button, Row, Col, Space } from \"antd\";\nimport Hours from \"../Hours\";\nimport FormItem from \"antd/lib/form/FormItem\";\nexport default function HoursSection(props) {\n\n \n const { ws, form, setChanged=() => {}} = props;\n\n return (\n <>\n <div id=\"hours\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Hours</Typography.Title>\n <Divider />\n {/* Hours */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Paragraph type=\"secondary\" >Enter an optional title of only a few words, which will appear above your store hours on the Contact / Hours page, and perhaps in other locations. (Example: \"Summer Hours\", or \"Open 362 days a year!\").</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\" >Enter opening and closing times for all regular days (Monday to Sunday). To enter the same time for multiple days, control + click the day names then enter the time in any one of the selected days.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\" >Uncheck the 'Open' checkbox to indicate the store is closed that day.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\" >To set closures or special hours on dates such as Christmas, click the Add Special Date button below the table. You can set dates once for the whole year, and should only need to revise them if they change year to year (example: Easter Sunday). On your Contact / Hours page, <strong>these will be displayed if they are upcoming in the next 30 days.</strong></Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\" >(Note there are custom input areas on your Contact / Hours page where you can insert text, tables, and pictures.)</Typography.Paragraph>\n \n <Hours setChanged={setChanged} id=\"global:ws_hours\" form={form} data={ws[\"global:ws_hours\"]} />\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n \n </div>\n </Space>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n </div>\n </>\n )\n}","import React from \"react\";\nimport { Form, Typography, Divider, Space, Button, Row, Col, Checkbox, Input, message } from \"antd\";\nimport WebstoreItem from \"../WebstoreItem\";\nimport conditional from \"../../../utils/conditional\";\nimport { apiCall } from \"../../../utils/Api\";\nimport { useState } from \"react\";\nexport default function MultistoreSection(props) {\n\n const { ws, form } = props;\n\n const [loading, setLoading] = useState(false);\n\n const verifyEmail = (_field) => {\n\n setLoading(true);\n apiCall(\"settings/verifyEmail\", { email: form.getFieldValue(\"multistore_location_info\")[_field].order_email }, (_status, _results) => {\n\n if (_status) {\n message.success(\"Email verfication successful.\");\n } else {\n message.success(\"Email verfication failed.\");\n }\n setLoading(false);\n })\n }\n\n const parseMessages = () => {\n\n let ret = window.sitesettings.stores.map(item => {\n return {\n san: item.san,\n message: \"\"\n }\n });\n\n if (!ws[\"global:ms_location_message\"]) { return ret; }\n if (!Array.isArray(ws[\"global:ms_location_message\"])) { return ret; }\n if (ws[\"global:ms_location_message\"].length !== window.sitesettings.stores.length) {\n return ret;\n }\n return ws[\"global:ms_location_message\"];\n }\n\n const [messages, setMessages] = useState(parseMessages());\n\n const drawPickerMessages = () => {\n\n //ms_location_message\n\n return messages.map((item, index) => {\n\n let _store = window.sitesettings.stores[index];\n let { altname = \"\" } = _store;\n\n return (\n <div>\n <Form.Item noStyle initialValue={messages[index][\"san\"]} label=\"Location:\" name={[\"global:ms_location_message\", index, \"san\"]}>\n <Input hidden maxLength={100} style={{ \"width\": \"410px\" }} />\n </Form.Item>\n <div><label style={{ \"fontSize\": \"12px\" }}>{altname}:</label></div>\n <Form.Item noStyle initialValue={messages[index][\"message\"]} label=\"Message:\" name={[\"global:ms_location_message\", index, \"message\"]}>\n <Input placeholder=\"Message...\" maxLength={100} style={{ \"width\": \"410px\" }} />\n </Form.Item>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n )\n })\n\n }\n\n const drawLocations = () => {\n\n let m = 0;\n\n let arr = Object.keys(ws[\"global:multistore_location_info\"]).map(item => {\n return ws[\"global:multistore_location_info\"][item];\n })\n\n return arr.sort((a, b) => a.chainnum - b.chainnum).map((obj) => {\n m++;\n return (\n <div key={obj.san}>\n <Typography.Title level={5}>{obj.altname}</Typography.Title>\n <Form.Item initialValue={obj.altname} label=\"Location name:\" name={[\"global:multistore_location_info\", obj.san, \"altname\"]}>\n <Input maxLength={80} style={{ \"width\": \"300px\" }} />\n </Form.Item>\n <conditional.true value={(obj.addr1)}>\n <div>{obj.addr1}</div>\n </conditional.true>\n <conditional.true value={(obj.addr2)}>\n <div>{obj.addr2}</div>\n </conditional.true>\n <conditional.true value={(obj.addr3)}>\n <div>{obj.addr3}</div>\n </conditional.true>\n <conditional.true value={(obj.addr4)}>\n <div>{obj.addr4}</div>\n </conditional.true>\n <conditional.true value={(obj.city)}>\n <div>{obj.city} {obj.prov}, {obj.country}</div>\n </conditional.true>\n <conditional.true value={(obj.postal)}>\n <div>{obj.postal}</div>\n </conditional.true>\n {/* <conditional.true value={(obj.chainnum !== 0)}>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Form.Item rules={[{ type: \"email\", message: \"Must be a valid email.\" }]} initialValue={obj.order_email} name={[\"global:multistore_location_info\", obj.san, \"order_email\"]}>\n <Input type=\"email\" style={{ \"maxWidth\": \"500px\" }} suffix={<Button loading={loading} onClick={() => verifyEmail(obj.san)} type=\"primary\">Verify Email</Button>} enterButton=\"Verify email\" placeholder=\"name@email.com\" />\n </Form.Item>\n </conditional.true> */}\n <Divider dashed />\n </div>\n );\n\n })\n\n }\n\n return (\n <>\n\n <div id=\"multistore\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Multi-Store</Typography.Title>\n <Divider />\n\n {/* Require email verification from new users when they create a new account */}\n <div id=\"global:ws_nonconsolidated_multistore\"></div>\n <WebstoreItem\n name=\"global:ws_nonconsolidated_multistore\"\n value={(ws[\"global:ws_nonconsolidated_multistore\"]) ? true : false}\n heading=\"Each store location has an individual webstore\"\n description={<div>If you would like a single webstore for your customers to browse and shop, with the ability for your customers to choose their preferred shopping/pickup location, leave this option unchecked. A single domain name will be used.\n <br /><br />\n If checked, you will need to maintain a separate consumer webstore for each of your locations. Each of these locations will need unique domain names.\n </div>}\n />\n\n <Divider dashed />\n {/* Require email verification from new users when they create a new account */}\n <div id=\"ms_location_popup_disabled\"></div>\n <WebstoreItem\n name=\"global:ms_location_popup_disabled\"\n value={(ws[\"global:ms_location_popup_disabled\"]) ? true : false}\n heading=\"Disable Location Picker Pop-Up\"\n description={<div>When customers visit your site, a location picker will automatically pop up, asking them to choose their preferred pick up or ship from location. This choice will be displayed within the top search / navigation bar. Customers can change this preference at any time, either by clicking the chosen location within the top navigation bar, or within their cart. <br /> <br />If you disable the automatic location picker pop-up, either your main location will be the default, or the last location the customer selected (if they were logged in). Customers will still be able to access the location picker from the cart or navigation bar even if the automatic pop-up is disabled.\n </div>}\n />\n\n <Divider dashed />\n {/* Require email verification from new users when they create a new account */}\n <div id=\"contact_information\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Contact information for orders</Typography.Title>\n <Typography.Paragraph type=\"secondary\">If you have a multi-store setup, your customers can choose which location they would like to pick up their books from. Enter a different name for each store in the \"Location name\" field below (example: \"Uptown\" or \"Downtown\").</Typography.Paragraph>\n <Typography.Paragraph type=\"danger\">Note that unless you enter a name for a store, it will NOT be shown in the \"Choose your store\" dialog.</Typography.Paragraph>\n <Typography.Paragraph type=\"secondary\">You can also upload a logo image for each location if you desire.</Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Require email verification from new users when they create a new account */}\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n {drawLocations()}\n </div>\n </Space>\n\n <Divider dashed />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5}>Location picker message\n <div><em><small style={{ \"color\": \"#888\", \"fontSize\": \"12px\" }}>Max 100 characters</small></em></div>\n </Typography.Title>\n {drawPickerMessages()}\n </div>\n </Space>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n </>\n )\n}","import React from \"react\";\nimport { Typography, Divider, Row, Col, Space, Form, Input } from \"antd\";\nexport default function SeoSection(props) {\n\n\n const { ws } = props;\n\n return (\n <>\n <div id=\"seo\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>SEO</Typography.Title>\n <Divider />\n {/* Hours */}\n <div id=\"ws_metadesc\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5} >Meta tags</Typography.Title>\n <Typography.Paragraph type=\"secondary\" >Meta tags provide web browsers and search engines with a simple description of your site and important keywords that people might use to find you. It can take a while for service providers and search engines to apply your changes.</Typography.Paragraph>\n <Typography.Paragraph><strong>Meta Tag Description:</strong></Typography.Paragraph>\n <Form.Item name=\"global:ws_metadesc\" initialValue={ws[\"global:ws_metadesc\"]} noStyle >\n <Input maxLength={255} style={{ \"maxWidth\": \"500px\" }}></Input>\n </Form.Item>\n <Typography.Paragraph type=\"secondary\">Example: Busytown's local independent bookstore since 1942 (limit to 255 characters)</Typography.Paragraph>\n <Typography.Paragraph><strong>Meta Tag Keywords:</strong></Typography.Paragraph>\n <Form.Item name=\"global:ws_metakeyw\" initialValue={ws[\"global:ws_metakeyw\"]} noStyle >\n <Input maxLength={200} style={{ \"maxWidth\": \"500px\" }}></Input>\n </Form.Item>\n <Typography.Paragraph type=\"secondary\">Example: bookstore, books, busytown, independent, Canadian fiction (limit to 200 characters and separate keywords with a comma and space)</Typography.Paragraph>\n </div>\n </Space>\n\n <Divider dashed />\n {/* Third party codes */}\n <div id=\"ws_google_analytics_ua\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5} >Third party codes</Typography.Title>\n <Typography.Text><strong>Google Analytics code: </strong></Typography.Text>\n <div style={{ \"width\": \"400px\" }} className=\"shim\"></div>\n <Form.Item name=\"global:ws_google_analytics_ua\" initialValue={ws[\"global:ws_google_analytics_ua\"]} noStyle >\n <Input maxLength={20} style={{ \"maxWidth\": \"200px\" }} ></Input>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text><strong>Google Site Verification code: </strong></Typography.Text>\n <Typography.Text></Typography.Text>\n <div className=\"shim\"></div>\n <Form.Item rules={[{ pattern: /^[a-zA-Z0-9_-]*$/, message: 'Use verification code only' }]} name=\"global:ws_meta_google\" initialValue={ws[\"global:ws_meta_google\"]} >\n <Input maxLength={44}></Input>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n\n </div>\n </Space>\n </div>\n </>\n )\n}","import React from \"react\";\nimport { Typography, Divider, Row, Col, Space, Form, Input, Checkbox } from \"antd\";\nexport default function AdvancedSecion(props) {\n\n\n const { ws } = props;\n\n \n\n return (\n <>\n <div id=\"advanced\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Advanced</Typography.Title>\n <Divider />\n\n {/* Custom Header text */}\n <div id=\"ws_head_custom_text\"></div>\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <Typography.Title level={5} >Custom head and body additions</Typography.Title>\n <Typography.Paragraph type=\"secondary\">These fields allow you to add JavaScript, CSS, etc. before the closing HTML \"head\" and \"body\" tags on your Webstore.<br /> Note: These settings apply to both mobile and desktop versions of the site.</Typography.Paragraph>\n <Typography.Text><strong>Head:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Form.Item name=\"global:ws_head_custom_text\" initialValue={ws[\"global:ws_head_custom_text\"]} noStyle >\n <Input.TextArea maxLength={1000} showCount style={{ \"maxWidth\": \"500px\" }} rows={3} ></Input.TextArea>\n </Form.Item>\n <div className=\"shim\"></div><div className=\"shim\"></div><div className=\"shim\"></div>\n <Typography.Text><strong>Body:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Form.Item name=\"global:ws_body_custom_text\" initialValue={ws[\"global:ws_body_custom_text\"]} noStyle >\n <Input.TextArea maxLength={1000} showCount style={{ \"maxWidth\": \"500px\" }} rows={3} ></Input.TextArea>\n </Form.Item>\n </div>\n </Space>\n\n\n </div>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Typography, Divider, Row, Col, Space, Form, Input, message, Spin } from \"antd\";\nimport TitleManager from \"../../../pages/settings/TitleManager\";\nimport { apiCall } from \"../../../utils/Api\";\nexport default function TitlesSection(props) {\n\n\n const { ws, form, setChanged = () => { } } = props;\n\n const [presets, setPresets] = useState([]);\n const [loading, setLoading] = useState(false)\n\n const getPresets = () => {\n setLoading(true)\n apiCall(\"toolbox/get\", { header: \"status\" }, (_status, _result) => {\n if (_status) {\n setPresets(_result.store_specific.concat(_result.bookmanager));\n } else {\n message.error(_result.error)\n }\n setLoading(false)\n })\n }\n\n useEffect(getPresets, [])\n\n\n\n\n return (\n <>\n\n <Spin spinning={loading}>\n <div id=\"titles\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Title Manager</Typography.Title>\n </div>\n <Divider style={{ \"marginTop\": \"0px\" }} />\n <div style={{ \"padding\": \"10px 30px\" }}>\n <div className=\"shim\" style={{ \"height\": \"20px\" }} />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <TitleManager allowPresets={true} presets={presets} setChanged={setChanged} title=\"Blocklist for Searching and Browsing\" subtitle=\"Add ISBN's to exclude them from customer searching and browsing. This would be items that are available to order from a preferred Pubstock source, or items you stock in store, that you do not want customers to find or purchase online.\" titles={ws[\"global:search_blacklist\"]} filters={ws[\"global:search_blacklist_preset\"]} preset_key=\"global:search_blacklist_preset\" form_key=\"global:search_blacklist\" form={form} />\n </div>\n </Space>\n </div>\n \n <div style={{ \"padding\": \"10px 30px\" }}>\n <div className=\"shim\" style={{ \"height\": \"20px\" }} />\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <TitleManager allowPresets={false} presets={presets} setChanged={setChanged} title=\"Allowlist for Searching and Browsing\" subtitle={<>Add ISBN's to include them in customer searching and browsing. This would be items that are not available to order from a preferred Pubstock source, and that you do not stock in store, but that you want customers to find or purchase online regardless.<br /><div className=\"shim\" /> <em>This list has very specific use cases, so please consult Bookmanager support to see if this option is required, or another setting is better suited.</em></>} filters={ws[\"global:search_whitelist_preset\"]} titles={ws[\"global:search_whitelist\"]} preset_key=\"global:search_whitelist_preset\" form_key=\"global:search_whitelist\" form={form} />\n </div>\n </Space>\n </div>\n \n <div style={{ \"padding\": \"10px 30px\" }}>\n <div className=\"shim\" style={{ \"height\": \"20px\" }} />\n\n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <TitleManager allowPresets={false} presets={presets} setChanged={setChanged} title=\"Zero price list\" subtitle={<>Add ISBN's that can be purchased for $0. For example, an ASAN ISBN for a ticket, but the ticket is free and just being used for RSVP/attendance management purposes.<br /><div className=\"shim\" /><em>By default, the webstore will not allow customers to check out for zero dollar items, so they must be added here as exceptions.</em></>} filters={ws[\"global:sell_zero_price_preset\"]} titles={ws[\"global:sell_zero_price\"]} preset_key=\"global:sell_zero_price_preset\" form_key=\"global:sell_zero_price\" form={form} />\n </div>\n </Space>\n </div>\n \n <div style={{ \"padding\": \"10px 30px\" }}>\n <div className=\"shim\" style={{ \"height\": \"20px\" }} />\n \n <Space>\n <div style={{ \"width\": \"35px\" }}></div>\n <div>\n <TitleManager allowPresets={false} presets={presets} setChanged={setChanged} title=\"Pay at Pick Up Blocklist\" subtitle={<>When a title from this blocklist has been added to a customer's cart, they won't be able to choose the 'Pay at Pick Up' option during checkout.</>} filters={ws[\"global:pickup_blacklist_preset\"]} titles={ws[\"global:pickup_blacklist\"]} preset_key=\"global:pickup_blacklist_preset\" form_key=\"global:pickup_blacklist\" form={form} />\n </div>\n </Space>\n\n </div>\n <br />\n </Spin>\n </>\n )\n}","import { Space, InputNumber } from \"antd\";\nimport React, { useState } from \"react\"\n\nexport default function ETARangePicker(props) {\n\n const {\n estimate_delivery = 0, \n estimate_delivery_max = 0,\n updateETA = () => {},\n obj = {}\n } = props;\n\n const [min, setMin] = useState(estimate_delivery);\n const [max, setMax] = useState(estimate_delivery_max);\n\n // Two inputs for min and max. max is disabled until min is set - max must be > min. both must be in 1-99 range\n\n // <InputNumber onChange={(e) => updateETA(e, f)} type=\"number\" style={{ \"width\": \"60px\" }} defaultValue={(Number.isInteger(e)) ? e : 0} size=\"small\" />\n return (\n <>\n <Space>\n <small>Between:</small>\n <InputNumber min={1} max={99} onChange={(e) => {setMin(e); updateETA(e, max, obj);}} type=\"number\" style={{ \"width\": \"60px\" }} value={(Number.isInteger(min)) ? min : 0} size=\"small\" />\n <small>and</small>\n <InputNumber max={99} onChange={(e) => {setMax(e); updateETA(min, e, obj);}} disabled={(min<1)} type=\"number\" style={{ \"width\": \"60px\", color : (max>0 && max < (min)) ? \"#f00\" : \"inherit\" }} value={(Number.isInteger(max)) ? max : 0} size=\"small\" />\n <small>days</small>\n </Space>\n </>\n )\n\n}","import React from \"react\";\nimport { InputNumber, Typography, Divider, Table, Card } from \"antd\";\nimport ETARangePicker from \"./ETARangePicker\";\nimport MSWrap from \"../layouts/Webstore/sections/MSWrap\";\nimport { drawMSTitleBar } from \"../utils/Utils\";\n\nexport default function VendorETA(props) {\n\n const { changed = false, setChanged = () => { }, suppliers = {}, setSuppliers = () => { } } = props;\n\n const primary = (window.sitesettings.stores[0]);\n const stores = (primary.is_primary) ? window.sitesettings.stores : [window.sitesettings.stores.find(item => item.is_primary)];\n\n const updateETA = (_min, _max, _obj, _store) => {\n let res = [...suppliers[_store]];\n let find = res.findIndex(item => item.acct === _obj.acct);\n if (!Number.isInteger(_min)) { _min = 0; }\n if (!Number.isInteger(_max)) { _max = 0; }\n\n if (_max <= _min) {\n _max = _min;\n }\n\n if (find > -1) {\n _obj.estimate_delivery = _min;\n _obj.estimate_delivery_max = _max;\n res[find] = _obj;\n setSuppliers({...suppliers, [_store] : res});\n setChanged(true);\n }\n }\n\n\n return (\n <div id=\"pubstocksetup\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Vendor ETAs</Typography.Title>\n <Divider />\n <Typography.Paragraph type=\"secondary\" >\n These Pubstock suppliers are possible sources for consumer special orders. Configuration for these suppliers is done within the Bookmanager software (<strong>3 Suppliers</strong> and the <strong>Format</strong> option when viewing Pubstock). Only suppliers marked with <strong>Favourite</strong> or <strong>Yes</strong> in the Bookmanager Software will be listed here and considered as sources of supply for customer special orders. <br /><br />Use the <strong>Order Time-frame</strong> field to specify how long it takes in business days to receive product <em>currently stocked</em> from each supplier, from the time a customer places their order until it is ready for in-store pick up. We recommended erring on the side of longer, as customers will always be happy to receive their order earlier than quoted.\n </Typography.Paragraph>\n\n <MSWrap padding={0} stores={stores}>\n {(stores.map((item, index) => {\n\n const columns = [\n {},\n {\n title: <small>Pubstock Code</small>, dataIndex: 'acct', key: 'acct', render: (e) => {\n return (e) ? e.toUpperCase() : \"\";\n }\n },\n { title: <small>Supplier Name</small>, dataIndex: 'name', key: 'name' },\n {\n title: <small>Order Time-frame <small> (business days)</small></small>, dataIndex: 'estimate_delivery', key: 'estimate_delivery', render: (e, f) => {\n return <ETARangePicker obj={f} updateETA={(a, b, c) => updateETA(a, b, c, \"ms\" + item.store_number)} estimate_delivery={e} estimate_delivery_max={f.estimate_delivery_max} />\n }\n },\n { title: <small>Exchange</small>, dataIndex: 'exchange', key: 'exchange' },\n { title: <small>Markup</small>, dataIndex: 'markup', key: 'markup' },\n { title: <small>SD</small>, dataIndex: 'min_margin', key: 'min_margin' },\n ]\n\n\n return (\n <>\n <div style={{ \"padding\": \"10px 23px\" }}><div className=\"shim\" />{drawMSTitleBar(stores, item.name, index, false)}</div>\n <Table\n size=\"small\"\n rowKey={\"acct\"}\n className={(stores.length > 1) ? \"\" : \"bdr\"}\n pagination={false}\n columns={columns}\n dataSource={suppliers[\"ms\" + item.store_number]}\n />\n\n </>\n )\n }))}\n </MSWrap>\n\n <Card bodyStyle={{ \"padding\": \"0px\", \"borderBottom\": \"none\" }}>\n\n\n\n </Card>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n </div>\n )\n\n\n}","\n\nexport const webstore_search = [\n {\n heading: \"Private webstore\",\n key: \"ws_self_login_required\",\n section: \"general\"\n },\n\n {\n heading: \"Treat non-approved customers as anonymous users\",\n key: \"ws_use_whitelist\",\n section: \"general\"\n },\n\n {\n heading: \"Visible only when customer is logged in\",\n key: \"ws_login_required\",\n section: \"general\"\n },\n\n {\n heading: \"Login Prompt\",\n key: \"ws_login_required_message\",\n section: \"general\"\n },\n\n\n {\n heading: \"Allow customers to view their lists at any Bookmanager site\",\n key: \"ws_allow_list_transfer\",\n section: \"general\"\n },\n\n {\n heading: \"Enable automatic browse redirection\",\n key: \"ws_auto_browse_destination\",\n section: \"general\"\n },\n\n {\n heading: \"Available to Order wording\",\n key: \"ws_order_wording\",\n section: \"ordering\"\n },\n\n {\n heading: \"Available On Hand wording\",\n key: \"ws_instore_instock\",\n section: \"pricing\"\n },\n\n {\n heading: \"Cover display wording\",\n key: \"ws_wording_hide_cover_nis_so\",\n section: \"pricing\"\n },\n\n\n {\n heading: \"Use custom On Hand conditions\",\n key: \"ws_use_onhand_conditions\",\n section: \"pricing\"\n },\n\n {\n heading: \"Hide listing and cart for regular (new) titles if non-regular stock exists at the same price\",\n key: \"ws_hide_matching_new_price_condition\",\n section: \"pricing\"\n },\n\n {\n heading: \"Featured Lists will be shown\",\n key: \"ws_default_featured_sort\",\n section: \"general\"\n },\n\n {\n heading: \"Alternate home page URL\",\n key: \"ws_homeurl\",\n section: \"general\"\n },\n\n {\n heading: \"Landing page URL\",\n key: \"ws_landing\",\n section: \"general\"\n },\n\n {\n heading: \"Enable Terms & Conditions\",\n key: \"ws_terms_consent_enabled\",\n section: \"general\"\n },\n\n {\n heading: \"Privacy Policy Page\",\n key: \"ws_policy_page\",\n section: \"general\"\n },\n\n {\n heading: \"Contact Us Page\",\n key: \"ws_custom_contact_page\",\n section: \"general\"\n },\n\n {\n heading: \"Street address In footer\",\n key: \"ws_hide_footer_address\",\n section: \"general\"\n },\n\n {\n heading: \"Social media\",\n key: \"ws_facebookurl\",\n section: \"general\"\n },\n\n {\n heading: \"Event sharing control\",\n key: \"ws_social_media_facebook_shareable\",\n section: \"general\"\n },\n\n {\n heading: \"Libro.fm Audiobook Integration\",\n key: \"ws_libro_bookstore_name\",\n section: \"general\"\n },\n\n {\n heading: \"Display carton quantity below Add to Cart\",\n key: \"ws_display_carton_quantity\",\n section: \"general\"\n },\n\n {\n heading: \"View on Webstore sends to Biz\",\n key: \"bm_use_biz_url\",\n section: \"general\"\n },\n\n {\n heading: \"Display Government of Canada funding acknowledgement\",\n key: \"ws_government_of_canada_logo_enabled\",\n section: \"general\"\n },\n\n\n // ACCOUNTS\n\n {\n heading: \"Email verification\",\n key: \"ws_email_auth\",\n section: \"accounts\"\n },\n\n {\n heading: \"Email notification\",\n key: \"ws_new_acct_notify\",\n section: \"accounts\"\n },\n\n {\n heading: \"Custom required fields in account creation form\",\n key: \"ws_new_acct_inputs\",\n section: \"accounts\"\n },\n\n {\n heading: \"Override welcome message\",\n key: \"ws_custom_welcome_msg\",\n section: \"accounts\"\n },\n\n // ORDERING\n\n {\n heading: \"Enable online ordering\",\n key: \"enable_online_ordering\",\n section: \"ordering\"\n },\n\n {\n heading: \"Orders email address\",\n key: \"order_email\",\n section: \"ordering\"\n },\n\n {\n heading: \"Enable cart abandonment reminder email\",\n key: \"ws_cart_abandonment_email_enabled\",\n section: \"ordering\"\n },\n\n {\n heading: \"Display estimated delivery date on special orders\",\n key: \"ws_show_estimated_delivery\",\n section: \"ordering\"\n },\n\n {\n heading: \"Submitted orders will auto generate a Held Sale in Bookmanager\",\n key: \"spool_order_files\",\n section: \"ordering\"\n },\n\n {\n heading: \"Adjust online On Hand quantities when orders are placed by customers\",\n key: \"ws_adjust_onhand_with_orders\",\n section: \"ordering\"\n },\n\n {\n heading: \"My Pubstock suppliers must have stock on hand (or NYR) to be considered a source of supply.\",\n key: \"ws_no_cart_unless_onhand\",\n section: \"ordering\"\n },\n\n\n {\n heading: \"Hide customer cart for ISBNs that are Out Of Stock (OS) or Out of Stock Indefinitely (OSI), except when you have it on On Hand or On Order.\",\n key: \"ws_no_cart_osi\",\n section: \"ordering\"\n },\n\n {\n heading: \"Do not remove ISBNs that are Out Of Stock, Out Of Stock Indefinitely, or Out Of Print from a customer's cart\",\n key: \"ws_allow_order_osi\",\n section: \"ordering\"\n },\n\n\n {\n heading: \"Allow Quote Checkout\",\n key: \"ws_quotes_enabled\",\n section: \"ordering\"\n },\n\n {\n heading: \"Allow Guest Checkout\",\n key: \"ws_guest_checkout\",\n section: \"ordering\"\n },\n\n {\n heading: \"When a customer is not logged in\",\n key: \"ws_hide_cart_price_if_anon\",\n section: \"ordering\"\n },\n\n\n {\n heading: \"Show order inscription option\",\n key: \"ws_show_order_inscription_field\",\n section: \"ordering\"\n },\n\n\n {\n heading: \"Allow in-Store pick up\",\n key: \"ws_delivery_pickup_enabled\",\n section: \"ordering\"\n },\n\n\n {\n heading: \"Checkout message for all orders\",\n key: \"ws_message_checkout\",\n section: \"ordering\"\n },\n\n\n {\n heading: \"Custom confirmation email message for picked up orders\",\n key: \"ws_message_pickup\",\n section: \"ordering\"\n },\n\n // SHIPPING\n\n {\n heading: \"Enable local delivery\",\n key: \"ws_local_delivery_enabled\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Local delivery message\",\n key: \"ws_message_local_cart\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Local delivery postal or ZIP codes\",\n key: \"ldc_local_delivery_code\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Find postal codes\",\n key: \"ldc_local_find_postal_codes\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Local delivery message\",\n key: \"ws_delivery_local_availability\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Local delivery threshold and fees\",\n key: \"ws_delivery_local_fee\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Order total must exceed\",\n key: \"ws_delivery_local_minimum\",\n section: \"shipping\"\n },\n\n\n {\n heading: \" Enable free local delivery over a set amount\",\n key: \"ws_delivery_local_free_enabled\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Free delivery if order total exceeds\",\n key: \"ws_delivery_local_free\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Enable shipping\",\n key: \"ws_delivery_ship_enabled\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Shipping cost exception list\",\n key: \"ws_shipping_base_rate_ignore_csv\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Shipping message (Before checkout)\",\n key: \"ws_message_ship_cart\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Shipping message (After checkout)\",\n key: \"ws_message_ship\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Enable batch shipping\",\n key: \"ws_batch_shipping\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Multiship\",\n key: \"multiship\",\n section: \"shipping\"\n },\n\n\n {\n heading: \"Shipping cost calculator\",\n key: \"cost_calculator\",\n section: \"shipping\"\n },\n\n\n // Searching\n\n {\n heading: \"Title search results will sort by default\",\n key: \"default_ts_sort\",\n section: \"searching\"\n },\n\n {\n heading: \"Filter options\",\n key: \"ws_hide_no_stock\",\n section: \"searching\"\n },\n\n {\n heading: \"Enable BM Class for consumers\",\n key: \"ws_enable_classes\",\n section: \"searching\"\n },\n\n {\n heading: \"Class filters header\",\n key: \"ws_bm_class_heading\",\n section: \"searching\"\n },\n\n // Pricing\n\n {\n heading: \"Add strikethrough to list prices\",\n key: \"ws_strikethrough\",\n section: \"pricing\"\n },\n \n {\n heading: \"Enable sales promotions & promo codes\",\n key: \"using_promo_codes\",\n section: \"pricing\"\n },\n\n {\n heading: \"Online price calculation for orders\",\n key: \"ws_price_estimate_strategy\",\n section: \"pricing\"\n },\n\n {\n heading: \"Customer discounts\",\n key: \"ws_online_discount\",\n section: \"pricing\"\n },\n\n {\n heading: \"Minimum profit margin\",\n key: \"ws_minimum_margin\",\n section: \"pricing\"\n },\n\n {\n heading: \"Display list prices\",\n key: \"ws_show_ca_us_list_prices\",\n section: \"pricing\"\n },\n\n {\n heading: \"Hide sale pricing from product details page\",\n key: \"ws_hide_sale_pricing\",\n section: \"pricing\"\n },\n\n\n // Payments\n\n {\n heading: \"Enable pay at pick up\",\n key: \"ws_accepts_payment_pickup\",\n section: \"payments\"\n },\n\n {\n heading: \"Enable contact for payment\",\n key: \"ws_accepts_payment_contact\",\n section: \"payments\"\n },\n\n {\n heading: \"Enable PayPal payments\",\n key: \"ws_accepts_paypal\",\n section: \"payments\"\n },\n\n {\n heading: \"Enable in-store credit card processing\",\n key: \"ws_credit_card_in_store\",\n section: \"payments\"\n },\n\n {\n heading: \"Disallow debit credit cards\",\n key: \"ws_disallow_cc_debit\",\n section: \"payments\"\n },\n\n\n // Multi-Store\n\n {\n heading: \"Each store location has an individual webstore\",\n key: \"ws_nonconsolidated_multistore\",\n section: \"multistore\"\n },\n\n {\n heading: \"Contact information for orders\",\n key: \"contact_information\",\n section: \"multistore\"\n },\n\n // SEO\n\n {\n heading: \"Meta tags\",\n key: \"ws_metadesc\",\n section: \"seo\"\n },\n\n {\n heading: \"Third party codes\",\n key: \"ws_google_analytics_ua\",\n section: \"seo\"\n },\n\n // Advanced\n\n {\n heading: \"Custom head and body additions\",\n key: \"ws_head_custom_text\",\n section: \"advanced\"\n },\n\n \n\n]\n\n","import { AutoComplete, Input } from \"antd\";\nimport React, { useState } from \"react\";\nimport { webstore_search } from \"../Webstore/webstore.js\";\nimport { SearchOutlined } from '@ant-design/icons';\nimport { useHistory } from \"react-router-dom\";\nexport default function WebstoreSearch(props) {\n\n const {setCurrent = () => {}, is_multistore = false} = props; \n\n const history = useHistory(); \n const [term, setTerm] = useState(\"\");\n const [key, setKey] = useState(\"\");\n const [results, setResults] = useState([]);\n\n function capitalizeFirstLetter(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n const onSearch = (value) => {\n\n\n setKey(value);\n let _result = webstore_search.filter(item => item.heading.toLowerCase().includes(value.toLowerCase()));\n if(!is_multistore){\n _result = _result.filter(item => item.section !== \"multistore\");\n }\n let _results = _result.filter(item => item.heading.toLowerCase().includes(value.toLowerCase())).map(item => {\n let _sn = capitalizeFirstLetter(item.section);\n if(_sn === \"Pricing\"){\n _sn = \"Pricing & Stock\";\n }\n return { value: item.key, label: <>{item.heading} <div><small style={{ \"opacity\": \"0.5\" }}>({_sn})</small></div></> }\n });\n setResults(_results);\n };\n\n\n const onSelect = (e) => {\n\n setKey(\"\");\n let _find = webstore_search.find(item => item.key === e);\n if(_find){\n setCurrent(_find.section + \"_section\");\n }\n\n setTimeout(() => {\n let element = document.getElementById(e);\n if(element){\n let m = element.getBoundingClientRect();\n window.scrollTo({\n top: m.y - 95,\n left: 0,\n behavior: 'smooth'\n });\n }\n }, 10)\n \n }\n\n\n\n return (\n <>\n {/* <div style={{\"pointerEvents\" : \"none\", \"opacity\" : \"0.4\"}}> */}\n <AutoComplete\n suffixIcon={<><SearchOutlined /></>}\n onSelect={(e) => onSelect(e)}\n options={results}\n value={key}\n style={{ \"width\": \"400px\" }}\n size=\"small\"\n onChange={(e) => onSearch(e)} \n >\n\n <Input.Search size=\"small\" placeholder=\"Search settings...\" enterButton />\n\n </AutoComplete>\n {/* </div> */}\n\n\n {/* <AutoComplete\n dropdownClassName=\"tinyDropdown\"\n placeholder=\"Search settings...\"\n style={{ \"width\": \"200px\" }}\n size=\"small\"\n options={[{ value: 0 }, { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }, { value: 5 }, { value: 6 }, { value: 7 }, { value: 8 }, { value: 9 }]}\n /> */}\n </>\n )\n}","import React, { useState } from \"react\";\nimport { Typography, Divider, Button, Layout, Upload, Spin, Table, Form, Space, message, Input, Modal, Popconfirm } from \"antd\";\nimport { UploadOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../../utils/Api\";\nimport FilterPresetPicker from \"./FilterPresetPicker\";\n\nexport default function ImpluseManager(props) {\n\n const { onChange = () => { }, allowPresets = false, presets = [], preset_key = \"\", title = \"\" } = props;\n const [pending, setPending] = useState(\"\");\n const titles = (props.titles) ? props.titles : []\n const [filters, setFilters] = useState((props.filters) ? props.filters : []);\n const [fileUploaded, setFileUploaded] = useState(false);\n const [edit, setEdit] = useState(false);\n\n const columns = [\n { title: <small></small>, dataIndex: 'eisbn', key: 'eisbn', width: 50, render: (e) => { return <img className=\"lightshadow\" onError={(e) => e.target.src = \"/no-cover.png\"} style={{ \"maxHeight\": \"34px\", \"maxWidth\": \"30px\" }} src={\"https://bookmanager.com/i/slider_23.php?b=\" + e} /> } },\n { title: <small>ISBN</small>, dataIndex: 'isbn', key: 'isbn', width: 150 },\n { title: <small>Title</small>, dataIndex: 'title', key: 'title', width: 150 },\n {\n title: <small>Description</small>, dataIndex: 'description', key: 'description', render: (e, f) => {\n return (e) ? e : <Button size=\"small\" onClick={(e) => setEdit(f)} type=\"link\"><small>Add description</small></Button>\n }\n },\n {\n title: <small>Remove</small>, width: \"80px\", dataIndex: 'success', key: 'success', render: (e, f) => {\n return (\n <Space>\n <Button onClick={(e) => setEdit(f)} type=\"link\" size=\"small\"><small><EditOutlined /></small></Button>\n <Popconfirm title=\"Are you sure?\" onConfirm={() => removeISBN(f.isbn)} >\n <Button type=\"link\" size=\"small\" danger ><small><DeleteOutlined /></small></Button>\n </Popconfirm>\n </Space>\n )\n }\n },\n ];\n\n const updateDescription = (_f) => {\n let _titles = [...titles];\n let _ti = _titles.findIndex(item => item.isbn === _f.isbn);\n if (_ti > -1) {\n _titles[_ti].description = _f.description;\n onChange(_titles);\n }\n }\n\n const drawEditForm = () => {\n\n const { isbn = \"\", description = \"\" } = edit;\n\n return (\n <div>\n <Typography.Title level={5}>Edit description</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n <Form layout=\"vertical\" onFinish={(_f) => updateDescription(_f)}>\n <Form.Item max={50} initialValue={isbn} hidden name=\"isbn\">\n <Input.TextArea showCount maxLength={100} placeholder=\"Description....\" />\n </Form.Item>\n <Form.Item max={50} initialValue={description} label=\"Description\" name=\"description\">\n <Input.TextArea showCount maxLength={100} placeholder=\"Description....\" />\n </Form.Item>\n <Divider dashed></Divider>\n <div style={{ \"float\": \"right\" }} >\n <Space>\n <Button onClick={() => setEdit(false)}>Cancel</Button>\n <Button type=\"primary\" htmlType=\"submit\" >Save</Button>\n </Space>\n </div>\n <br clear=\"both\" />\n </Form>\n </div>\n )\n }\n\n const removeISBN = (_isbn) => {\n let _titles = [...titles.filter(item => item.isbn !== _isbn)]\n onChange(_titles);\n }\n\n const addISBN = (_isbn) => {\n\n if (!_isbn) {\n return;\n }\n\n let _eisbn = \"\";\n let _title = \"\";\n apiCall(\"title/getItem\", { isbn: _isbn }, (_s, _r) => {\n if (_r.hasOwnProperty(\"eisbn\") && _r.hasOwnProperty(\"title\")) {\n _eisbn = _r.eisbn;\n _title = _r.title;\n }\n let _titles = [...titles.filter(item => item.isbn !== _isbn)];\n _titles.push({\n isbn: _isbn,\n eisbn: _eisbn,\n title: _title\n });\n setPending(\"\");\n onChange(_titles);\n })\n }\n\n const [loading, setLoading] = useState(false);\n const [uploaded, setUploaded] = useState([])\n\n const uploadFile = (_file) => {\n setLoading(true);\n let obj = {}\n obj.file = _file.file;\n apiCall(\"titlelist/parseFile\", obj, (_status, _result) => {\n if (_status) {\n setUploaded(_result.titles);\n setFileUploaded(true);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n });\n }\n\n const closeModal = () => {\n setUploaded([]);\n setModal(false);\n setFileUploaded(false);\n }\n\n const addImportToList = (_titles) => {\n\n let _current = [...titles];\n let _currentTotal = _current.length;\n _titles.forEach(element => {\n let _find = _current.find(item => item.isbn === element.isbn);\n if (!_find) {\n _current.push({\n isbn: element.isbn,\n title: element.title,\n eisbn: element.eisbn,\n description: \"\"\n })\n }\n });\n\n if (_currentTotal === _current.length) {\n setFileUploaded(false);\n setModal(false);\n setUploaded([]);\n message.error(\"No titles added\");\n } else {\n onChange(_current);\n setFileUploaded(false);\n setModal(false);\n setUploaded([]);\n let _count = _current.length - _currentTotal;\n message.success(_count.toString() + \" titles added\");\n }\n\n }\n\n const [modal, setModal] = useState(false);\n\n const showInstructions = () => {\n return (\n <>\n <Layout className=\"layout\">\n <Layout.Content style={{ \"padding\": \"0px\", \"width\": \"auto\" }} >\n <div style={{ \"padding\": \"30px\" }}>\n <Typography.Title level={5}>Choose File... </Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} />\n {(!fileUploaded && <>\n <Upload.Dragger accept=\".txt, .pdf, .xls, .xlsx, .html, .csv\" showUploadList={false} customRequest={(e) => uploadFile(e, false)} style={{ \"padding\": \"0px 20px\", \"height\": \"300px\" }}>\n <div >\n {(loading) ? <Spin style={{ height: \"35px\" }} /> : <UploadOutlined style={{ \"fontSize\": \"30px\", height: \"35px\" }} />}\n </div>\n <p className=\"ant-upload-text\">Click or drag to upload</p>\n <p className=\"ant-upload-hint\">\n Upload an Excel file (.xls or .xlsx), Text file (.txt) <br />or a tab-delimited file (.txt).\n </p>\n </Upload.Dragger>\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setModal(false)}>Cancel</Button></div>\n <br clear=\"all\" />\n </>)}\n {(fileUploaded && <>\n <div>\n <Table locale={{ emptyText: \"No titles\" }} scroll={{ y: 255 }} className=\"d\" pagination={false} columns={columns.filter(item => item.key !== \"success\")} dataSource={uploaded} size=\"small\"></Table>\n <div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => closeModal()}>Cancel</Button>\n <Button disabled={!(uploaded.length > 0)} type=\"primary\" onClick={() => addImportToList(uploaded)}>Add</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </div>\n </>)}\n </div>\n </Layout.Content>\n </Layout>\n </>)\n }\n\n const filterCallback = (_presets) => {\n setFilters(_presets);\n }\n\n return (\n <>\n <Modal footer={null} bodyStyle={{ \"padding\": \"0px\" }} visible={modal} onCancel={() => setModal(false)}>\n {showInstructions()}\n </Modal>\n <Modal footer={null} visible={edit} onCancel={() => setEdit(false)} >\n {drawEditForm()}\n </Modal>\n\n {(allowPresets && <>\n <Form.Item noStyle name={preset_key} initialValue={filters} />\n <label>{title} Filter Presets</label>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <FilterPresetPicker callback={(e) => filterCallback(e)} multiple={true} filters={filters} presets={presets} />\n </>)}\n\n <label>{title} ISBNS</label>\n <div className=\"shim\" />\n <Input.Search onSearch={(e) => addISBN(e)} size=\"middle\" enterButton={<small>Add ISBN</small>} placeholder=\"Add ISBN\" onChange={(e) => setPending(e.target.value)} value={pending} />\n <div className=\"shim\" /><div className=\"shim\" /><div className=\"shim\" />\n <Table locale={{ emptyText: \"No titles\" }} scroll={{ y: 255 }} className=\"tableBorder\" pagination={false} columns={columns} dataSource={titles} size=\"small\"></Table>\n <div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setModal(true)} size=\"small\" type=\"primary\" icon={<UploadOutlined />}><small> Upload</small></Button></div>\n </>\n );\n}","import React, { useEffect, useState } from \"react\";\nimport { Typography, Divider, Space, Input, message, Spin, Switch } from \"antd\";\nimport { apiCall } from \"../../../utils/Api\";\nimport ImpluseManager from \"../../../pages/settings/ImpluseManager\";\n\nexport default function ImpulseSection(props) {\n\n const { triggerImpulse = false, setTriggerImpulse = () => { }, changed = false, setChanged = () => { } } = props;\n const [loading, setLoading] = useState(true);\n\n const [pickup, setPickup] = useState({\n enabled: false,\n headline: \"\",\n description: \"\",\n isbns_info: []\n })\n\n const [ship, setShip] = useState({\n enabled: false,\n headline: \"\",\n description: \"\",\n isbns_info: []\n })\n\n const save = () => {\n\n const _pickup = {\n type: \"pickup\", \n enabled: pickup.enabled,\n headline: (pickup.headline) ? pickup.headline : \"\",\n description: (pickup.description) ? pickup.description : \"\",\n isbns_info_json: JSON.stringify(pickup.isbns_info)\n }\n\n const _ship = {\n type: \"ship\", \n enabled: ship.enabled,\n headline: (ship.headline) ? ship.headline : \"\",\n description: (ship.description) ? ship.description : \"\",\n isbns_info_json: JSON.stringify(ship.isbns_info)\n }\n\n setLoading(true);\n\n apiCall(\"impulse_buy/set\", _pickup, (_status, _result) => {\n if (_status) {\n apiCall(\"impulse_buy/set\", _ship, (_s, _r) => {\n if(_s){\n setShip(_r.ship);\n setPickup(_r.pickup);\n } else {\n message.error(_result.error)\n }\n setLoading(false);\n setTriggerImpulse(false);\n setChanged(false)\n })\n } else {\n message.error(_result.error)\n setLoading(false);\n setTriggerImpulse(false);\n setChanged(false)\n }\n })\n }\n\n\n useEffect(() => {\n if (triggerImpulse) {\n save();\n }\n\n }, [triggerImpulse]);\n\n \n\n const getImpulse = () => {\n setLoading(true)\n apiCall(\"impulse_buy/getAll\", {}, (_status, _result) => {\n if (_status) {\n setShip(_result.ship);\n setPickup(_result.pickup);\n } else {\n message.error(_result.error)\n }\n setLoading(false)\n })\n }\n\n useEffect(getImpulse, [])\n\n\n const u = {\n type: \"pickup\", // ship\n enabled: true,\n headline: \"Pickup\",\n description: \"Extra stuff to get at pickup\",\n isbns_info_json: JSON.stringify([\n {\n isbn: \"9781338730920\",\n description: \"Hey Tobias!\"\n }\n ])\n }\n\n\n\n const ImpulseOption = (props) => {\n\n const { option = {}, setOption = () => { }, type = \"pickup\", setChanged = () => { } } = props;\n\n const {\n enabled = false,\n headline = \"\",\n description = \"\",\n isbns_info = []\n } = option;\n\n const updateEnabled = (_f) => {\n setOption({ ...option, \"enabled\": _f });\n if(!changed) {setChanged(true)}\n }\n\n const updateHeadline = (_f) => {\n setOption({ ...option, \"headline\": _f })\n if(!changed) {setChanged(true)}\n }\n\n const updateDescription = (_f) => {\n setOption({ ...option, \"description\": _f })\n if(!changed) {setChanged(true)}\n }\n\n const updateTitles = (_f) => {\n setOption({ ...option, \"isbns_info\": _f })\n if(!changed) {setChanged(true)}\n }\n\n const label = (type === \"pickup\") ? \"In-Store Pick Up / Guest Checkout\" : \"Ship / Local Delivery\"\n\n return (\n <>\n <Divider dashed />\n <Space align=\"start\" size={15}>\n <div style={{ width: \"28px\" }}><Switch checked={enabled} onChange={(e) => updateEnabled(e)} size=\"small\" /></div>\n <div>\n <Typography.Title level={5}>Enable Impulse Purchase For {label}</Typography.Title>\n <Divider dashed style={{ \"margin\": \"15px 0px\" }} />\n <Spin indicator={<></>} spinning={!enabled}>\n\n <Space size={15} align=\"start\">\n <div style={{ \"width\": \"300px\" }}>\n <div className=\"shim\" />\n <label>Headline...</label>\n <Input key={\"headline\"} defaultValue={headline} onBlur={(e) => updateHeadline(e.target.value)} placeholder=\"Headline...\" />\n <label>Description</label>\n <Input.TextArea key={\"textarea\"} defaultValue={description} onBlur={(e) => updateDescription(e.target.value)} rows={5}></Input.TextArea>\n </div>\n <div>\n <ImpluseManager onChange={(_f) => updateTitles(_f)} bottom={true} titles={isbns_info} title={<span style={{ \"fontSize\": \"14px\", \"fontWeight\": \"normal\" }}>{label}</span>} />\n </div>\n </Space>\n </Spin>\n </div>\n </Space>\n <div className=\"shim\" /><div className=\"shim\" />\n </>\n\n )\n }\n\n\n\n return (\n <>\n\n\n\n <Spin spinning={loading}>\n <div id=\"titles\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Impulse Purchase</Typography.Title>\n <Divider />\n <Space align=\"start\" size={15}>\n <div style={{ width: \"28px\" }}> </div>\n <div>\n <Typography.Title level={5}>Impulse Purchase Pop-Up</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n Enable this option to display a pop-up purchase menu when customers go to the cart. This could be used to solicit donations, feature event tickets or signed copies, or if you are required to / want to charge for bags.<br /><br />\n <em>Credit card processing fees should not be set up using this feature, so please contact Bookmanager support if that is something you would like to configure online.</em><br /><br />\n Multiple products can be added to the impulse pop-up. ASANs can be used, but must be created in the Bookmanager software first. If ASANs are used, title info, class (and therefore taxation), price, and an image need to be added in full. The impulse pop-up can be tied to specific order fulfillment options ( In-store Pick Up / Guest Checkout, Ship / Local Delivery). You can specify the headline and overview descriptive text for the impulse pop up.<br /><br />\n </Typography.Paragraph>\n </div>\n </Space>\n\n <ImpulseOption setChanged={setChanged} type={\"pickup\"} option={pickup} setOption={setPickup} />\n\n <ImpulseOption setChanged={setChanged} type={\"ship\"} option={ship} setOption={setShip} />\n\n </div>\n </Spin >\n </>\n )\n}","import React from \"react\";\nimport { Typography, Divider, Row, Col, Space, Form, Input, Checkbox } from \"antd\";\nimport { drawMSFooter, drawMSTitleBar } from \"../../../utils/Utils\";\nimport MSWrap from \"./MSWrap\";\nexport default function FooterSection(props) {\n\n const { ws } = props;\n const primary = (window.sitesettings.stores[0]);\n const stores = (primary.is_primary) ? window.sitesettings.stores : [window.sitesettings.stores.find(item => item.is_primary)];\n\n console.log(stores);\n\n return (\n <>\n <div id=\"advanced\" style={{ \"padding\": \"10px 30px\" }}>\n <Typography.Title level={4}>Site Footer</Typography.Title>\n <Divider />\n\n\n\n <div style={{ \"width\": \"35px\" }}></div>\n\n <MSWrap stores={stores}>\n {(stores.map((item, index) => {\n\n return (\n <>\n {drawMSTitleBar(stores, item.name, index)}\n <div>\n <Typography.Title level={5} >Custom footer fields</Typography.Title>\n <Typography.Paragraph type=\"secondary\">The website footer is generated from other webstore settings and the contact information we have attached to your main Bookmanager account. You can overide any specific field below.</Typography.Paragraph>\n\n\n {/* Address */}\n <Typography.Text><strong>Footer Message:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"message\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"message\"]} noStyle >\n <Input.TextArea placeholder=\"Footer message...\" style={{ \"maxWidth\": \"500px\" }} ></Input.TextArea>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"message\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"message\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div><div className=\"shim\"></div>\n\n\n {/* Address */}\n <Typography.Text><strong>Address Line 1:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"address_1\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"address_1\"]} noStyle >\n <Input placeholder=\"Address Line 1...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"address\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"address\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n <Typography.Text><strong>Address Line 2:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"address_2\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"address_2\"]} noStyle >\n <Input placeholder=\"Address Line 2...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n </Col>\n </Row>\n\n {/* Postal code */}\n <div className=\"shim\"></div>\n <Typography.Text><strong>Postal code:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"postal\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"postal\"]} noStyle >\n <Input placeholder=\"Postal code...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"postal_code\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"postal_code\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Province / State */}\n <Typography.Text><strong>Province / State:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"province\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"province\"]} noStyle >\n <Input placeholder=\"Province / State...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"province\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"province\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Province / State */}\n <Typography.Text><strong>Country:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"country\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"country\"]} noStyle >\n <Input placeholder=\"Country...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"country\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"country\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* City */}\n <Typography.Text><strong>City:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"city\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"city\"]} noStyle >\n <Input placeholder=\"City...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"city\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"city\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Email */}\n <Typography.Text><strong>Email:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"email\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"email\"]} noStyle >\n <Input placeholder=\"Email...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"email\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"email\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Phone */}\n <Typography.Text><strong>Phone:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"phone\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"phone\"]} noStyle >\n <Input placeholder=\"Phone...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"phone\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"phone\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Phone */}\n <Typography.Text><strong>Phone 2:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"phone_2\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"phone_2\"]} noStyle >\n <Input placeholder=\"Phone 2...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"phone_2\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"phone_2\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Toll Free */}\n <Typography.Text><strong>Toll Free:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"phone_toll_free\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"phone_toll_free\"]} noStyle >\n <Input placeholder=\"Toll Free...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"toll_free\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"toll_free\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n\n {/* Fax */}\n <Typography.Text><strong>Fax:</strong></Typography.Text>\n <div className=\"shim\"></div>\n <Row gutter={20}>\n <Col flex={\"auto\"}>\n <Form.Item name={[`ms${item.store_number}:ws_footer_data`, \"fax\"]} initialValue={ws[`ms${item.store_number}:ws_footer_data`][\"fax\"]} noStyle >\n <Input placeholder=\"Fax...\" showCount style={{ \"maxWidth\": \"500px\" }} ></Input>\n </Form.Item>\n </Col>\n <Col flex={\"120px\"}>\n <Form.Item name={[`ms${item.store_number}:footer_display_rules`, \"fax\"]} valuePropName=\"checked\" initialValue={ws[`ms${item.store_number}:footer_display_rules`][\"fax\"]} noStyle >\n <Checkbox>Enabled?</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <div className=\"shim\"></div>\n <div className=\"shim\"></div>\n <div className=\"shim\"></div>\n <div className=\"shim\"></div>\n </div>\n {drawMSFooter(stores, index)}\n </>)\n }))}\n </MSWrap>\n\n </div>\n </>\n )\n}","import React, { useEffect, useState, useRef } from \"react\";\nimport { Form, Layout, Spin, Affix, Typography, message, Tabs, Divider, Button, Modal, Alert } from \"antd\";\nimport { apiCall } from \"../../utils/Api\";\nimport { useForm } from \"antd/lib/form/Form\";\nimport GeneralSection from \"../../layouts/Webstore/sections/GeneralSection\";\nimport AccountsSection from \"../../layouts/Webstore/sections/AccountsSection\";\nimport OrderingSection from \"../../layouts/Webstore/sections/OrderingSection\";\nimport ShippingSection from \"../../layouts/Webstore/sections/ShippingSection\";\nimport SearchingSection from \"../../layouts/Webstore/sections/SearchingSection\";\nimport PricingSection from \"../../layouts/Webstore/sections/PricingSection\";\nimport PaymentsSection from \"../../layouts/Webstore/sections/PaymentsSection\";\nimport HoursSection from \"../../layouts/Webstore/sections/HoursSection\";\nimport MultistoreSection from \"../../layouts/Webstore/sections/MultiStoreSection\";\nimport SeoSection from \"../../layouts/Webstore/sections/SeoSection\";\nimport AdvancedSecion from \"../../layouts/Webstore/sections/AdvancedSection\";\nimport TitlesSection from \"../../layouts/Webstore/sections/TitlesSection\";\nimport VendorETA from \"../../components/VendorETA\";\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\";\nimport WebstoreSearch from \"../../layouts/Webstore/WebstoreSearch\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { webstore_search } from \"../../layouts/Webstore/webstore\";\nimport ImpulseSection from \"../../layouts/Webstore/sections/ImpulseSection\";\nimport FooterSection from \"../../layouts/Webstore/sections/FooterSection\";\n\nexport default function WebstoreSettingsPage() {\n\n\n const { section = \"general\", search = \"\" } = useParams();\n const history = useHistory();\n const [loading, setLoading] = useState(true);\n const [ws, setWs] = useState(false);\n const [form] = useForm();\n const [regions, setRegions] = useState([]);\n const [autoHeldSale, setAutoHeldSale] = useState(false);\n const [update, setUpdate] = useState(false);\n const [current, setCurrent] = useState(section + \"_section\");\n const [suppliers, setSuppliers] = useState([]);\n const [changed, setChanged] = useState(false);\n const is_multistore = (window.sitesettings.stores.filter(item => item.cart_active || item.is_primary).length > 1);\n\n \n const [triggerImpulse, setTriggerImpulse] = useState(false);\n\n const getSuppliers = (_e) => {\n\n if (_e) {\n setChanged(false);\n setCurrent(_e);\n }\n\n apiCall(\"supplier/getEstDelivery\", {}, (_status, _result) => {\n if (_status) {\n setSuppliers(_result)\n }\n });\n }\n useEffect(getSuppliers, []);\n\n const parsePath = (_str = \"\") => {\n\n _str = _str.replace(\"_section\", \"\");\n return _str.toLowerCase();\n }\n\n\n const slugify = (str) => {\n return str\n .toLowerCase()\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/[^\\w-]+/g, '') // Remove non-word characters (except hyphens)\n .replace(/--+/g, '-'); // Replace consecutive hyphens with a single hyphen\n }\n\n\n let arr = []\n webstore_search.forEach(item => {\n \n let str = \"/settings/web-store-settings/\" + item.section + \"/\" + slugify(item.heading);\n arr.push(str)\n })\n\n \n \n const gotoAnchor = () => {\n\n if(loading || !search){\n return; \n }\n let _find = webstore_search.find(item => slugify(item.heading) === search);\n if (_find) {\n setTimeout(() => {\n let element = document.getElementById(_find.key);\n if (element) {\n let m = element.getBoundingClientRect();\n window.scrollTo({\n top: m.y - 100,\n left: 0,\n behavior: 'smooth'\n });\n }\n }, 10)\n }\n }\n\n useEffect(gotoAnchor, [loading])\n\n const [first, setFirst] = useState(true)\n const reposition = () => {\n window.scrollTo(0, 0);\n let _str = \"/settings/web-store-settings/\" + parsePath(current);\n if (search && first) {\n _str += \"/\" + search;\n setFirst(false)\n }\n history.push(_str);\n }\n\n useEffect(reposition, [current]);\n\n const fetchSettings = (_e) => {\n\n if (_e) {\n form.resetFields();\n setChanged(false);\n setCurrent(_e);\n return;\n }\n\n apiCall(\"settings/get\", {}, (_status, _results) => {\n if (_status) {\n setWs(_results);\n setAutoHeldSale((_results[\"global:shipping_regions\"]) ? true : false);\n setRegions(_results[\"global:shipping_regions\"]);\n setChanged(false)\n }\n setLoading(false);\n })\n }\n\n useEffect(fetchSettings, []);\n\n const onUpdateSettings = (_status, _results) => {\n if (_status) {\n setWs(_results);\n message.success(\"Settings saved successfully.\")\n setChanged(false);\n } else {\n message.error(_results.error)\n }\n setLoading(false);\n }\n\n\n const convertHours = (_hours) => {\n\n let _obj = {}\n Object.keys(_hours).map(key => {\n // store\n _obj[key] = {}\n\n if (_hours[key].hasOwnProperty(\"title\")) {\n _obj[key].title = _hours[key].title;\n }\n\n if (_hours[key].hasOwnProperty(\"hours\")) {\n _obj[key].hours = Object.keys(_hours[key].hours).map(itm_key => {\n return _hours[key].hours[itm_key];\n })\n }\n\n if (_hours[key].hasOwnProperty(\"exceptions\")) {\n\n _obj[key].exceptions = Object.keys(_hours[key].exceptions).map(itm_key => {\n return _hours[key].exceptions[itm_key];\n })\n }\n\n\n })\n\n\n return _obj\n\n }\n const updateSettings = (_f) => {\n\n\n if (_f.hasOwnProperty(\"global:ws_online_discount\")) {\n //_f.ws_hours = convertHours(_f.ws_hours); \n _f[\"global:ws_online_discount\"] = parseInt(_f[\"global:ws_online_discount\"]) || 0;\n }\n\n // don't send if not touched\n if (!form.isFieldTouched(\"global:ldc_local_delivery_code\")) {\n delete _f[\"global:ldc_local_delivery_code\"];\n }\n\n\n setLoading(true);\n apiCall(\"settings/set\", { settings: JSON.stringify(_f) }, onUpdateSettings)\n }\n\n const changePrompt = (_e) => {\n Modal.confirm({\n title: \"Save changes?\", onOk: () => {\n save(_e);\n }, onCancel: () => {\n if (current === \"vendor_eta_section\") {\n getSuppliers(_e);\n } else {\n fetchSettings(_e);\n }\n }, content: <>You've made changes, would you like to save changes or revert?</>, cancelText: \"Revert\", okText: \"Save\"\n })\n }\n\n\n\n\n const drawElement = () => {\n\n if (!ws) {\n return (<></>);\n }\n\n\n switch (current) {\n case \"general_section\": return <GeneralSection ws={ws} form={form} />\n case \"accounts_section\": return <AccountsSection ws={ws} form={form} />\n case \"ordering_section\": return <OrderingSection setChanged={setChanged} autoHeldSale={autoHeldSale} setAutoHeldSale={setAutoHeldSale} ws={ws} form={form} />\n case \"shipping_section\": return <ShippingSection setChanged={setChanged} setUpdate={setUpdate} update={update} setRegions={setRegions} regions={regions} ws={ws} form={form} />\n case \"searching_section\": return <SearchingSection ws={ws} form={form} />\n case \"pricing_section\": return <PricingSection ws={ws} form={form} />\n case \"payments_section\": return <PaymentsSection setChanged={setChanged} autoHeldSale={autoHeldSale} setAutoHeldSale={setAutoHeldSale} ws={ws} form={form} />\n case \"hours_section\": return <HoursSection setChanged={setChanged} ws={ws} form={form} />\n case \"multistore_section\": return (is_multistore) ? <MultistoreSection ws={ws} form={form} /> : <></>\n case \"seo_section\": return <SeoSection ws={ws} form={form} />\n case \"footer_section\": return <FooterSection ws={ws} form={form} />\n case \"advanced_section\": return <AdvancedSecion ws={ws} form={form} />\n case \"titles_section\": return <TitlesSection setChanged={setChanged} ws={ws} form={form} />\n case \"impulse_section\": return <ImpulseSection triggerImpulse={triggerImpulse} setTriggerImpulse={setTriggerImpulse} setChanged={setChanged} changed={changed} />\n case \"vendor_eta_section\": return <VendorETA suppliers={suppliers} setSuppliers={setSuppliers} changed={changed} setChanged={setChanged} />\n default: return <GeneralSection ws={ws} form={form} />\n }\n\n\n\n }\n\n const save = (_e) => {\n\n\n\n if(current === \"impulse_section\"){\n setTriggerImpulse(true);\n return; \n }\n\n\n if (current === \"vendor_eta_section\") {\n\n \n\n apiCall(\"supplier/setEstDelivery\", {\n suppliers: JSON.stringify(suppliers)\n }, (_status, _result) => {\n if (_status) {\n setSuppliers(_result);\n if (_e) {\n setCurrent(_e);\n setChanged(false);\n }\n setChanged(false);\n message.success(\"Vendor ETAs updated successfully.\")\n } else {\n message.error(_result.error)\n }\n })\n } else {\n form.submit();\n if (_e) {\n setCurrent(_e);\n }\n }\n }\n\n const gotoSection = (_e) => {\n\n if (changed) {\n changePrompt(_e);\n } else {\n setCurrent(_e)\n }\n\n }\n\n const drawProblems = () => {\n\n\n if (ws.hasOwnProperty(\"problems\")) {\n\n if (!ws.problems.length > 0) {\n return (<></>);\n }\n return (<Alert type=\"error\" description={ws.problems.map(item => {\n return (<div><small>{item}</small></div>);\n })} />)\n }\n\n }\n\n return (\n <>\n <Form form={form} onFieldsChange={() => {\n if (!changed) {\n setChanged(true);\n }\n }} onFinish={(_f) => updateSettings(_f)}>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Webstore Settings\"\n description=\"Use this page to manage webstore settings and permissions.\"\n button={<>\n <WebstoreSearch loading={loading} is_multistore={is_multistore} setCurrent={setCurrent} />\n </>}\n />\n\n </Layout>\n <div style={{ \"height\": \"20px\" }} className=\"shim shimbg\" />\n <Layout className=\"layout\">\n <Layout.Sider width={200} theme=\"light\">\n <Affix style={{ \"marginTop\": \"0px\" }} offsetTop={100}>\n <div>\n <Tabs size=\"small\" onChange={(e) => gotoSection(e)} activeKey={current} style={{ \"paddingLeft\": \"17px\" }} tabPosition=\"left\" type=\"card\">\n <Tabs.TabPane tab={<div className=\"wstab\">General</div>} key=\"general_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Accounts</div>} key=\"accounts_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Ordering</div>} key=\"ordering_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Shipping</div>} key=\"shipping_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Searching</div>} key=\"searching_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Pricing & Stock</div>} key=\"pricing_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Payments</div>} key=\"payments_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Hours</div>} key=\"hours_section\" />\n {(is_multistore && <Tabs.TabPane tab={<div className=\"wstab\">Multi-Store</div>} key=\"multistore_section\" />)}\n <Tabs.TabPane tab={<div className=\"wstab\">SEO</div>} key=\"seo_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Site Footer</div>} key=\"footer_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Advanced</div>} key=\"advanced_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Title Manager</div>} key=\"titles_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Impulse Purchase</div>} key=\"impulse_section\" />\n <Tabs.TabPane tab={<div className=\"wstab\">Vendor ETAs</div>} key=\"vendor_eta_section\" />\n </Tabs>\n <div style={{ \"width\": \"165px\", \"marginLeft\": \"25px\" }}>\n <div className=\"shim\" /> <div className=\"shim\" />\n <Button loading={loading} block type=\"primary\" disabled={(!changed)} onClick={() => save()} size=\"small\"><small>Save changes</small></Button>\n <div className=\"shim\" /><div className=\"shim\" />\n {drawProblems()}\n\n </div>\n </div>\n </Affix>\n </Layout.Sider>\n <Layout.Content className=\"borderLeft\" style={{ \"padding\": \"0px\", \"minHeight\": \"calc(100vh - 250px)\" }} >\n <Spin style={{ \"minHeight\": \"500px\" }} spinning={loading}>\n {drawElement()}\n </Spin>\n </Layout.Content>\n </Layout>\n </Form>\n </>\n )\n}","import React, { useEffect, useState } from \"react\";\nimport { Layout, Typography, Divider, Button, Card, Tree, Row, Col, Table, Menu, Dropdown, Form, Modal, Upload, Input, message, Space, TreeSelect } from \"antd\";\nimport { SmileOutlined, DownOutlined, UploadOutlined } from '@ant-design/icons';\nimport { apiCall } from \"../utils/Api\";\nimport { bmDate, bytesToSize, ucfirst } from \"../utils/Utils\";\nimport { useHistory } from \"react-router-dom\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport conditional from \"../utils/conditional\";\nexport default function SiteUploadsPage() {\n\n\n const [fileList, setFileList] = useState([]);\n const [uploading, setUploading] = useState(false);\n const [currentDirectory, setCurrentDirectory] = useState(\"/\");\n const [currentTitle, setCurrentTitle] = useState(\"Root\");\n const [filename, setFilename] = useState(\"\");\n const [selectedFile, setSelectedFile] = useState({});\n\n\n\n\n const onRemove = (_file) => {\n setFileList([]);\n }\n\n // disables auto sending file. \n const beforeUpload = (_file) => {\n setFileList([_file]);\n return false;\n }\n\n const handleUpload = (_f) => {\n let _name = fileList[0].name;\n let _ext = _name.split(\".\");\n _ext = _ext[_ext.length - 1];\n if (filename) { _name = filename + \".\" + _ext; }\n let _location = (currentDirectory === \"/\") ? currentDirectory + _name : currentDirectory + \"/\" + _name;\n setUploading(true);\n apiCall(\"files/upload\", { file: fileList[0], location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"File uploaded successfully.\")\n } else {\n message.error(\"Error: \" + _result.error);\n }\n setUploading(false);\n setUploadVisible(false);\n setFileList([])\n fetchList();\n })\n }\n\n\n const removeFolder = () => {\n\n Modal.confirm({\n\n title : \"Remove Folder?\",\n content : <>Are you sure you wish to delete <em>{currentDirectory}</em>?</>,\n\n onOk : () => {\n let _location = currentDirectory;\n apiCall(\"files/rmdir\", { location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"Folder removed successfully.\")\n setCurrentDirectory(\"/\")\n } else {\n message.error(_result.error);\n }\n setFolderVisible(false);\n fetchList();\n });\n }\n })\n \n }\n\n const createFolder = (_f) => {\n let _location = currentDirectory + \"/\" + _f.folder;\n apiCall(\"files/mkdir\", { location: _location }, (_status, _result) => {\n if (_status) {\n message.success(\"Folder created successfully.\")\n } else {\n message.error(_result.error);\n }\n setFolderVisible(false);\n fetchList();\n });\n }\n\n const moveFile = (_f) => {\n let _from = selectedFile.path;\n let _to = _f.folder + \"/\" + selectedFile.name;\n apiCall(\"files/mv\", { from_location: _from, to_location: _to }, (_status, _result) => {\n if (_status) {\n message.success(\"File moved successfully.\")\n } else {\n message.error(_result.error);\n }\n closeMove();\n fetchList();\n })\n }\n\n\n const [moveVisible, setMoveVisible] = useState(false);\n\n const drawMoveBox = () => {\n\n return (\n <Modal destroyOnClose width={400} onCancel={() => closeMove()} visible={moveVisible} centered footer={null}>\n <Typography.Title level={5}>Move file</Typography.Title>\n <div style={{ \"marginTop\": \"-5px\", \"color\": \"#666\" }}><small>Move <strong>{currentTitle}</strong> to another directory</small></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Form onFinish={(e) => moveFile(e)} layout=\"vertical\">\n <div className=\"shim\" />\n <Form.Item rules={[{ required: true, message: \"Folder required.\" }]} label={<small>Folder name</small>} name=\"folder\">\n <TreeSelect treeDefaultExpandAll placeholder=\"Select directory...\" treeData={parseTree(results.files.tree)} />\n </Form.Item>\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => closeMove()}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Move</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </Modal>\n )\n\n }\n\n\n const download = (_path) => {\n var el = document.createElement(\"a\");\n el.setAttribute('download', \"\");\n el.target = \"_blank\"\n el.href = _path;\n document.body.appendChild(el);\n el.click();\n }\n\n\n\n\n const [folderVisible, setFolderVisible] = useState(false);\n const drawFolderBox = () => {\n\n return (\n <Modal destroyOnClose width={400} onCancel={() => setFolderVisible(false)} visible={folderVisible} centered footer={null}>\n <Typography.Title level={5}>New Folder</Typography.Title>\n <div style={{ \"marginTop\": \"-5px\", \"color\": \"#666\" }}><small>Create a new folder in the <strong>{currentTitle}</strong> directory</small></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Form onFinish={(e) => createFolder(e)} layout=\"vertical\">\n <div className=\"shim\" />\n <Form.Item rules={[{ required: true, message: \"Folder name required.\", pattern: new RegExp(/^[a-z0-9 ]+$/i) }]} label={<small>Folder name</small>} name=\"folder\">\n <Input placeholder=\"Folder name...\" />\n </Form.Item>\n <div style={{ \"float\": \"right\" }}>\n <Space>\n {/* <Button danger onClick={() => removeFolder()}>Delete</Button> */}\n <Button onClick={() => setFolderVisible(false)}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Create</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </Modal>\n )\n }\n\n const [uploadVisible, setUploadVisible] = useState(false);\n\n\n const closeUploadBox = () => {\n setFileList([]);\n setFilename(\"\");\n setUploadVisible(false)\n }\n\n const drawUploadBox = () => {\n\n return (\n <Modal destroyOnClose width={400} onCancel={() => closeUploadBox(false)} visible={uploadVisible} centered footer={null}>\n <Typography.Title level={5}>Upload file</Typography.Title>\n <div style={{ \"marginTop\": \"-5px\", \"color\": \"#666\" }}><small>Upload file to the <strong>{currentTitle}</strong> directory</small></div>\n <Divider style={{ \"margin\": \"10px 0px\" }} />\n <Form layout=\"vertical\">\n <div className=\"shim\" />\n <Form.Item help={<small className=\"c\" style={{ \"opacity\": \"0.5\" }} >Renaming file is optional.</small>} label={<small>Rename File?</small>}>\n <Input value={filename} onChange={(e) => setFilename(e.target.value.replace(/[^\\w\\s]/gi, ''))} placeholder=\"New name...\" />\n </Form.Item>\n <br />\n <div style={{ \"float\": \"right\" }}>\n <Space align=\"start\">\n <Upload multiple={false} onRemove={(_file) => onRemove(_file)} beforeUpload={(_file) => beforeUpload(_file)}>\n <Button type=\"primary\" disabled={(fileList.length > 0)} icon={<UploadOutlined />}>Select file</Button>\n </Upload>\n <Button\n type=\"primary\"\n onClick={handleUpload}\n disabled={fileList.length === 0}\n loading={uploading}\n >\n {uploading ? 'Uploading' : 'Start upload'}\n </Button>\n </Space>\n </div>\n <Button onClick={() => closeUploadBox()}>Cancel</Button>\n <br clear=\"both\" />\n </Form>\n </Modal>\n )\n }\n\n\n\n const findInArray = (_arr, _key, _val) => {\n\n let found = false;\n _arr.forEach(item => {\n if (item.hasOwnProperty(\"children\")) {\n\n let _search = findInArray(item.children, _key, _val);\n if (_search) {\n found = _search;\n }\n }\n if (item[_key] === _val) {\n found = item;\n }\n })\n return found;\n\n }\n\n const drawRemoveFolder = () => {\n\n let ret = findInArray(results.files.tree, \"path\", currentDirectory)\n let can_delete = false;\n console.log(ret);\n if (ret && ret.hasOwnProperty(\"children\")) {\n if (ret.children.length === 0) {\n can_delete = true;\n }\n }\n\n if (can_delete) {\n return (\n <Button block danger onClick={() => removeFolder()} type=\"primary\" size=\"small\">\n <small>Remove Folder</small>\n </Button>\n )\n }\n\n\n\n }\n\n const [results, setResults] = useState({ files: { path: \"\", tree: [] } });\n const [selected, setSelected] = useState([]);\n\n const columns = [\n { width: 10 },\n { title: <small>File</small>, dataIndex: 'name', key: 'name', sorter: { compare: (a, b) => a.name.localeCompare(b.name) }, },\n {\n title: <small></small>, dataIndex: 'path', key: 'path', render: (e, f) => {\n if (f.hasOwnProperty(\"image\")) {\n return <a alt={f.name} href={window.sitesettings.file_url + \"/\" + e} target=\"_blank\"><img style={{ \"maxWidth\": \"50px\", \"maxHeight\": \"50px\" }} src={window.sitesettings.file_url + \"/\" + e} /></a>\n } else {\n return (<></>)\n }\n }\n },\n {\n title: <small>File size</small>, dataIndex: 'size', key: 'size', sorter: (a, b) => a.size - b.size, render: (e) => {\n return (e) ? bytesToSize(e) : \"\";\n }\n },\n {\n title: <small>Modified date</small>, defaultSortOrder: 'descend', dataIndex: 'last_modified', key: 'last_modified', sorter: (a, b) => a.last_modified - b.last_modified, render: (e) => {\n return (e) ? bmDate(e * 1000) : \"\"\n }\n },\n {\n title: <small>Dimensions</small>, dataIndex: 'image', key: 'image', render: (e) => {\n if (e) {\n return (e.width + \"px x\" + e.height + \"px\")\n }\n }\n },\n\n {\n title: <small>\n <Space>\n {drawRemoveFolder()}\n <Button block onClick={() => setUploadVisible(true)} type=\"primary\" size=\"small\"><small>Upload to Folder</small></Button>\n </Space>\n\n\n </small>, width: 88, dataIndex: 'actions', key: 'actions', render: (e, f) => { return drawActions(e, f) }\n }\n ]\n\n\n const openMove = (_f) => {\n setSelectedFile(_f);\n setMoveVisible(true)\n }\n\n const closeMove = () => {\n setSelectedFile({});\n setMoveVisible(false);\n }\n\n const deleteFile = (_f) => {\n\n apiCall(\"files/rm\", { location: _f.path }, (_status, _result) => {\n if (_status) {\n message.success(\"File deleted successfully.\");\n } else {\n message.error(_result.error);\n }\n setSelectedFile({});\n fetchList();\n })\n console.log();\n }\n\n\n\n const openDelete = (_f) => {\n\n setSelectedFile(_f);\n Modal.confirm({ icon: <></>, onOk: () => deleteFile(_f), okText: \"Delete\", okButtonProps: { danger: true }, title: \"Delete?\", content: <>Are you sure you wish to delete <strong>{_f.name}</strong>?</> });\n }\n\n\n\n const drawMenu = (e, f) => {\n return (\n <Menu>\n {(f.hasOwnProperty(\"image\") && <Menu.Item onClick={() => window.open(window.sitesettings.file_url + \"/\" + f.path, \"_blank\")}><small>View</small></Menu.Item>)}\n <Menu.Item onClick={() => download(window.sitesettings.file_url + f.path)}><small>Download</small></Menu.Item>\n <Menu.Item onClick={() => openMove(f)}><small>Move to...</small></Menu.Item>\n <Menu.Item onClick={() => openDelete(f)} danger ><small>Delete</small></Menu.Item>\n </Menu>\n )\n }\n\n\n const drawActions = (e, f) => {\n\n return (\n <>\n <Dropdown overlay={drawMenu(e, f)}>\n <Button block size=\"small\">\n <small>Actions...</small>\n </Button>\n </Dropdown>\n </>\n )\n }\n\n const fetchList = () => {\n apiCall(\"files/ls\", { location: \"/\" }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n })\n }\n\n useEffect(fetchList, []);\n\n\n const parseChildren = (_arr) => {\n return _arr.map(item => {\n return {\n title: item.name,\n key: item.path,\n items: (item.hasOwnProperty(\"children\")) ? item.children.filter(f => !f.is_directory) : [],\n children: (item.hasOwnProperty(\"children\")) ? parseChildren(item.children.filter(f => f.is_directory)) : []\n }\n })\n }\n\n const parseTree = (_arr) => {\n let _ret = {\n title: \"Root\",\n key: \"/\",\n items: _arr.filter(f => !f.is_directory),\n children: parseChildren(_arr.filter(f => f.is_directory))\n }\n return [_ret];\n }\n\n const parseSelection = (_children = [], _item) => {\n setCurrentDirectory(_item.key);\n setCurrentTitle(_item.title);\n setSelected(_item.items);\n }\n\n\n\n const parseSelected = () => {\n\n let ret = findInArray(results.files.tree, \"path\", currentDirectory)\n\n\n if (ret) {\n return ret.children.filter(f => !f.is_directory);\n } else {\n\n if (currentDirectory === \"/\") {\n return results.files.tree.filter(f => !f.is_directory);\n }\n\n return [];\n }\n\n\n }\n\n return (\n <>\n {drawUploadBox()}\n {drawFolderBox()}\n {drawMoveBox()}\n <Layout className=\"layout\">\n\n <LayoutHeader\n title=\"Site Uploads\"\n description=\"Use this area to upload images to be displayed on your webstore's site.\"\n />\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n\n <div style={{ \"padding\": \"20px\" }}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <Row>\n <Col flex={\"250px\"}>\n <div className=\"folders\">\n <div style={{ \"float\": \"right\" }}><Button onClick={() => setFolderVisible(true)} type=\"primary\" size=\"small\"><small>New Folder</small></Button></div>\n <small>Folders</small>\n </div>\n <div style={{ \"padding\": \"0px\" }}>\n <div className=\"shim\" />\n <Tree.DirectoryTree\n defaultExpandAll\n defaultSelectedKeys={[\"/\"]}\n className=\"tree\"\n onSelect={(e, f) => parseSelection(f.node.children, f.selectedNodes[0])}\n switcherIcon={<></>}\n treeData={parseTree(results.files.tree)}\n />\n </div>\n </Col>\n <Col className=\"bcg\" flex={\"1px\"}>\n </Col>\n <Col flex={\"auto\"}>\n\n <div style={{ \"borderBottom\": \"0px\" }}>\n\n <Table\n \n defaultSortOrder=\"descend\"\n defaultSortField=\"last_modified\"\n rowKey={\"path\"}\n rowClassName={\"hideHover\"}\n size=\"small\"\n columns={columns}\n dataSource={parseSelected()}\n />\n </div>\n </Col>\n </Row>\n </Card>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import Cookies from \"js-cookie\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { Spin, Result, Divider } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { useSession } from \"../utils/Session\";\nimport Conditions from \"../components/Conditions\";\nimport Extras from \"../components/Extras\";\n\nexport default function StockCheckPage() {\n\n\n const [context, setContext] = useSession(); \n\n const { isbn = \"\", session = \"\", store_id = \"\" } = useParams();\n const history = useHistory();\n const [loading, setLoading] = useState(true);\n const [results, setResults] = useState({ sales: [] });\n const [error, setError] = useState(\"\");\n const ref = useRef(); \n\n const loadAnimation = <LoadingOutlined style={{ fontSize: 45 }} spin />\n\n\n let container_height = 500;\n const getHeight = () => {\n setTimeout(() => {\n let h = ref.current.clientHeight || 0;\n if(h !== container_height){\n window.parent.postMessage({size: h + \"px\"}, \"*\");\n }\n container_height = h; \n getHeight(); \n }, 1000)\n }\n useEffect(getHeight, [])\n\n\n\n const getSession = () => {\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n setContext({...context, \"temp_session\" : session});\n window.store_id = store_id;\n Cookies.set(\"session_store_id\", _result.session_id, { expires: 365, secure : true, sameSite : \"None\" });\n if (_result.logged_in) {\n getSettings();\n } else {\n setError(\"There was an error\");\n }\n }\n }, \"store\", true, session, store_id);\n }\n\n const getSettings = () => {\n apiCall(\"store/getSettings\", {}, (_status, _result) => {\n if (_status) {\n window.sitesettings = _result;\n getItem();\n } else {\n setError(\"There was an error\");\n }\n }, \"store\", true, session, store_id)\n }\n\n \n useEffect(getSession, []);\n\n const getItem = () => {\n\n apiCall(\"title/getItem\", { isbn: isbn }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n } else {\n setError(\"There was an error\");\n }\n setLoading(false);\n }, \"store\", true, session, store_id)\n }\n\n\n \n \n \n\n if(loading){\n return (\n <Result\n status={\"success\"}\n icon={<Spin indicator={loadAnimation} />}\n title={\"Loading...\"}\n subTitle={\"This will only take a moment...\"}\n />\n )\n }\n\n if (error) {\n return (\n <Result status=\"warning\" title={error} />\n )\n }\n\n return (\n <div ref={ref}>\n <Conditions conditions={results.conditions} data={results} isbn={(results) ? results.isbn : isbn} />\n <Extras data={(results) ? results : {}} isbn={(results) ? results.isbn : isbn} />\n </div>\n )\n\n\n\n\n}","import React, { useState } from \"react\";\nimport { Layout, Typography, Divider, Button, Card, Upload, Space, message } from \"antd\";\nimport { UploadOutlined, DownloadOutlined } from '@ant-design/icons';\nimport { apiCall, apiDownload } from \"../utils/Api\";\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\n\nexport default function StockTitleUploadPage(props) {\n\n // Flag to change title and enable excel download\n const { management = false } = props;\n\n const [fileList, setFileList] = useState([]);\n const [uploading, setUploading] = useState(false);\n\n const downloadInterm = () => {\n\n apiCall(\"interm/download\", {}, (_status, _result) => {\n if(_status){\n window.open(\"/pdf/\" + _result.progress_report_id)\n } else {\n message.error(_result.error)\n }\n }); \n\n \n }\n\n const onRemove = (_file) => {\n setFileList([]);\n }\n\n // disables auto sending file. \n const beforeUpload = (_file) => {\n setFileList([_file]);\n return false;\n }\n\n const handleUpload = () => {\n setUploading(true);\n apiCall(\"interm/upload\", { file: fileList[0] }, (_status, _result) => {\n if (_status) {\n message.success(\"File uploaded successfully.\")\n } else {\n message.error(\"Error: \" + _result.error);\n }\n setUploading(false);\n })\n }\n\n return (\n <>\n <Layout className=\"layout\" >\n <LayoutHeader\n title={(management) ? \"Stock Managment\" : \"Stock and Title Uploads\"}\n description=\"Use this page to upload your stock or title data information for us to process as an alternative to FTP.\"\n button={(management) ? <Button onClick={() => downloadInterm()} icon={<small><DownloadOutlined /> </small>} type=\"primary\" size=\"small\"><small>Download current OHs</small></Button> : \"\"}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Card>\n <p>Select a file and click \"Start upload\"</p>\n <Space align=\"start\">\n <Upload multiple={false} onRemove={(_file) => onRemove(_file)} beforeUpload={(_file) => beforeUpload(_file)}>\n <Button disabled={(fileList.length > 0)} icon={<UploadOutlined />}>Select file</Button>\n </Upload>\n <Button\n type=\"primary\"\n onClick={handleUpload}\n disabled={fileList.length === 0}\n loading={uploading}\n >\n {uploading ? 'Uploading' : 'Start upload'}\n </Button>\n </Space>\n </Card>\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import { Button, Layout, message, Radio, Table } from \"antd\";\nimport moment from 'moment-timezone';\nimport React, { useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiCall } from \"../utils/Api\";\nimport { useSession } from \"../utils/Session\";\nimport { pathToObject } from \"../utils/Utils\";\n\nexport default function SuggestedCartsPage() {\n\n const location = useLocation();\n const [searchFilters, setSearchFilters] = useState(pathToObject(location.pathname))\n const [initLoaded, setInitLoaded] = useState(false);\n const [suggestedCarts, setSuggestedCarts] = useState([]);\n const [sharedView, setSharedView] = useState(false);\n const [session, setSession] = useSession();\n \n function getAllSuggestedCarts(hide_completed = false, sf = searchFilters){\n apiCall(\"suggested_cart/getAll\", {hide_completed : hide_completed, limit: sf.l, offset: sf.o}, (_status, _result) => {\n if (_status) {\n setSuggestedCarts(_result);\n setInitLoaded(true);\n } \n })\n }\n\n function completeSuggestedCart(f){\n let args = {\n store_id: session.corp_id,\n cart_id: f.id,\n done: true,\n };\n apiCall(\"suggested_cart/toggleDone\", args, (_status, _result) => {\n if(_status){\n message.success(f.name + \" Completed!\")\n }\n })\n }\n\n function viewInBrowse(sc_id){\n window.open(\"/purchasing/browse/filter/x/\" + sc_id + \"/v/sequence\", \"_blank\");\n\n }\n\n //To grab all suggested carts for the list on page load, no matter the status\n useEffect(() => {getAllSuggestedCarts(true)}, []);\n \n const columns = [\n {\n title: <small style={{\"paddingLeft\": \"10px\"}}>ISBN Count</small>, \n width: 100, \n dataIndex: 'count', \n key: 'count' ,\n sorter: (a,b) => a.count - b.count\n },\n {\n title: <small>Name</small>, \n dataIndex: 'name', \n key: 'name' ,\n render: (e, f) => {\n return (e) ? <a onClick={() => viewInBrowse(f.id)}>{e}</a> : \"\";\n }\n },\n {\n title: <small>Rep Name</small>, \n dataIndex: 'rep_info', \n key: 'rep_info', \n render: (e,f) =>{\n return (e.name)\n } ,\n },\n {\n title: <small>Shared Date</small>, \n width: 150, \n dataIndex: 'shared_date', \n key: 'shared_date', \n render: (e,f) => {\n return ( moment(f.shared_date * 1000).format(\"MMMM D YYYY\") )\n }\n },\n ]\n //for displaying a button to allow a store to complete working with a suggested cart, or to show the date they completed it on.\n if(!sharedView){\n columns.push(\n {\n title: <small>Mark Complete</small>, \n dataIndex: 'name', \n width: '200px',\n key: 'name', \n render: (e,f) => {\n if(f.marked_done_date > 0 ){\n return (\n <Button type='text' size=\"small\">\n Cart Completed\n </Button>\n )\n }\n return (\n <Button type='primary' size=\"small\" onClick={(e) => {completeSuggestedCart(f)}}>\n Complete this Cart\n </Button>\n )\n }\n },\n )\n }else{\n columns.push(\n {\n title: <small>Completed Date</small>, \n width: 150, \n dataIndex: 'marked_done_date', \n key: 'marked_done_date', \n render: (e,f) => {\n if(f.marked_done_date > 0 ){\n return ( moment(f.marked_done_date * 1000).format(\"MMMM D YYYY\") )\n }\n return ( \"Not yet complete\" )\n }\n },\n )\n }\n\n return (\n ((initLoaded) && <>\n <Layout className=\"layout\" style={{ \"minHeight\": \"200px\" }}>\n <LayoutHeader\n title={<>Suggested Carts</>}\n description={\n <>\n <div>\n <Radio.Group \n size='small'\n defaultValue={sharedView} \n buttonStyle=\"solid\" \n onChange={(e) => { \n setSharedView(e.target.value)\n getAllSuggestedCarts(!e.target.value)\n }\n }>\n <Radio.Button value={false}>Incomplete Carts</Radio.Button>\n <Radio.Button value={true}>Completed Carts</Radio.Button>\n </Radio.Group>\n </div>\n </>\n }\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <Table\n size='small'\n pagination\n columns={columns}\n dataSource={suggestedCarts}\n />\n </Layout.Content>\n </Layout>\n </>)\n )\n}","import Cookies from \"js-cookie\";\nimport React, { useEffect } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { Spin, Result, message } from \"antd\";\nimport { apiCall } from \"../utils/Api\";\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { useSession } from \"../utils/Session\";\nimport { objectToPath } from \"../utils/Utils\";\n\nexport default function SwitchPage() {\n\n\n const { ses = \"\" } = useParams();\n const [, setSession] = useSession();\n const history = useHistory();\n\n const old_session = Cookies.get(\"session_store_id\") || \"\";\n const old_store_id = window.store_id || \"\"; \n\n const getSession = () => {\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n //Cookies.set(\"session_store_id\", _result.session_id, { expires: 365 });\n \n window.store_id = _result.store_id;\n apiCall(\"store/getSettings\", {}, (_s, _r) => {\n window.sitesettings = _r;\n if (_result.logged_in) {\n setSession(_result);\n let _path = \"/purchasing/browse\" + objectToPath(_result.filter_preset_defaults.status.selections);\n history.replace(_path)\n } else {\n history.replace(\"/\")\n }\n //logOutOld(); \n })\n }\n }, \"store\", true, ses);\n }\n\n const logOutOld = () =>{\n\n if(old_session === ses){\n let _path = \"/\";\n history.replace(_path)\n return; \n }\n\n\n apiCall(\"account/logout\", {}, (_status, _result) => {\n getSession(); \n }, \"store\", true, old_session, old_store_id);\n\n Cookies.set(\"session_store_id\", ses, { expires: 365 });\n }\n\n\n useEffect(logOutOld, []);\n\n\n \n\n const loadAnimation = <LoadingOutlined style={{ fontSize: 45 }} spin />\n\n return (\n <>\n <br /><br /><br /><br /><br />\n <Result\n status={\"success\"}\n icon={<Spin indicator={loadAnimation} />}\n title={\"Switching...\"}\n subTitle={\"This will only take a moment...\"}\n />\n\n </>\n )\n\n\n\n\n}","\nimport React, { useEffect, useState } from \"react\";\nimport { Layout, Card, Row, Col, Button, Table, Space, Popconfirm, Modal, Form, Input, Divider, InputNumber, Typography, message, Select } from \"antd\";\nimport { DeleteOutlined, EditOutlined } from '@ant-design/icons';\nimport LayoutHeader from \"../layouts/partials/LayoutHeader\";\nimport { apiCall } from \"../utils/Api\";\nimport conditional from \"../utils/conditional\";\n\nexport default function TaxPreferencesPage() {\n\n const [results, setResults] = useState({ tax_groups: [], tax_types: [], has_edit_permission: false });\n\n const [changed, setChanged] = useState(false);\n const [groupVisible, setGroupVisible] = useState(false);\n const [rateVisible, setRateVisible] = useState(false);\n\n const [groupCurrent, setGroupCurrent] = useState({\n // _record: { name: \"\", code: \"\", tax_1: \"\", tax_2: \"\", tax_b: \"\", tax_3: \"\", id: \"\" },\n _record: { name: \"\", code: \"\", tax_1: \"\", id: \"\" },\n _index: 0,\n _new: true,\n })\n\n const [rateCurrent, setRateCurrent] = useState({\n _record: { name: \"\", code: \"\", rate: \"\", id: \"\" },\n _index: 0,\n _new: true,\n })\n\n const codes = [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\"];\n const getTaxes = () => {\n apiCall(\"taxes/get\", {}, (_status, _result) => {\n if (_status) {\n setResults(_result);\n }\n })\n }\n useEffect(getTaxes, []);\n\n\n const save = () => {\n\n apiCall(\"taxes/set\", { tax_types: JSON.stringify(results.tax_types), tax_groups: JSON.stringify(results.tax_groups) }, (_status, _result) => {\n if (_status) {\n setResults(_result);\n setChanged(false);\n message.success(\"Saved successfully.\")\n } else {\n message.error(_result.error);\n }\n })\n\n }\n\n\n const getNextCode = () => {\n let _rates = results.tax_types.map(item => item.code);\n let _available = codes.filter(x => !_rates.includes(x));\n return _available[0];\n }\n\n\n const [rate_form] = Form.useForm();\n\n\n const removeGroup = (_index) => {\n const _update = [...results.tax_groups];\n _update.splice(_index, 1);\n setResults({ ...results, \"tax_groups\": _update });\n setChanged(true);\n }\n\n // Check to ensure the rate isn't used in the customer codes\n const removeRate = (_index) => {\n let _code = results.tax_types[_index].code;\n \n // let _used = results.tax_groups.filter(item => item.tax_1.includes(_code)).concat(results.tax_groups.filter(item => item.tax_2.includes(_code))).concat(results.tax_groups.filter(item => item.tax_b.includes(_code))).concat(results.tax_groups.filter(item => item.tax_3.includes(_code)))\n let _used = results.tax_groups.filter(item => item.tax_1.includes(_code));\n if (_used.length > 0) {\n Modal.warning({ title: \"This rate is currently used in \" + _used.length + \" tax group(s). \", content: <div style={{ \"opacity\": \"0.6\" }}>Please first remove or re-assign the tax groups before removing the tax rate.</div> });\n return;\n }\n const _update = [...results.tax_types];\n _update.splice(_index, 1);\n setResults({ ...results, \"tax_types\": _update });\n setChanged(true);\n }\n\n const updateGroup = (_f, _index, _new) => {\n setGroupVisible(false);\n let _update = [...results.tax_groups]\n if (_new) {\n _update.push({\n \"name\": _f.name,\n \"code\": getNextCode(),\n \"tax_1\": _f.tax_1.join(\"\"),\n // \"tax_2\": _f.tax_2.join(\"\"),\n // \"tax_b\": _f.tax_b.join(\"\"),\n // \"tax_3\": _f.tax_3.join(\"\"),\n \"id\": Math.random() * 10000\n })\n } else {\n _update[_index] = {\n \"id\": _f.id,\n \"name\": _f.name,\n \"code\": _f.code,\n \"tax_1\": _f.tax_1.join(\"\"),\n // \"tax_2\": _f.tax_2.join(\"\"),\n // \"tax_b\": _f.tax_b.join(\"\"),\n // \"tax_3\": _f.tax_3.join(\"\"),\n }\n }\n setResults({ ...results, \"tax_groups\": _update });\n setChanged(true);\n\n }\n\n\n const updateRate = (_f, _index, _new) => {\n setRateVisible(false);\n let _update = [...results.tax_types]\n if (_new) {\n _update.push({\n \"name\": _f.name,\n \"code\": getNextCode(),\n \"rate\": _f.rate,\n \"id\": Math.random() * 10000\n })\n } else {\n _update[_index] = {\n \"id\": _f.id,\n \"name\": _f.name,\n \"code\": _f.code,\n \"rate\": _f.rate\n }\n }\n setResults({ ...results, \"tax_types\": _update });\n setChanged(true);\n }\n\n\n useEffect(() => {\n console.log(\"called\");\n }, results)\n\n\n\n const drawGroupEdit = () => {\n\n return (\n <>\n <Typography.Title level={5}>{(groupCurrent._new) ? \"New customer code\" : \"Edit customer code\"}</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n <Form layout=\"vertical\" onFinish={(_f) => updateGroup(_f, groupCurrent._index, groupCurrent._new)}>\n <Form.Item initialValue={groupCurrent._record.id} hidden name=\"id\">\n <Input />\n </Form.Item>\n <Form.Item rules={[{ required: true, message: \"Code is required.\" }]} initialValue={groupCurrent._record.code} label=\"Code\" name=\"code\">\n <Input maxLength={4} placeholder=\"Code...\" />\n </Form.Item>\n <Form.Item rules={[{ required: true, message: \"Description is required.\" }]} initialValue={groupCurrent._record.name} label=\"Description\" name=\"name\">\n <Input maxLength={30} placeholder=\"Label...\" />\n </Form.Item>\n <Form.Item rules={[{ required: true, message: \"Minimum of 1 code is required.\" }]} initialValue={(groupCurrent._record.tax_1) ? groupCurrent._record.tax_1.split(\"\") : []} label=\"Tax 1\" name=\"tax_1\">\n <Select\n mode=\"multiple\"\n allowClear\n style={{ width: '100%' }}\n placeholder=\"Please select\"\n\n >\n {results.tax_types.map(item => {\n return <Select.Option value={item.code}>{item.code}<small> - <em>{item.name}</em></small></Select.Option>\n })}\n </Select>\n </Form.Item>\n\n {/* <Form.Item initialValue={(groupCurrent._record.tax_2) ? groupCurrent._record.tax_2.split(\"\") : []} label=\"Tax 2\" name=\"tax_2\">\n <Select\n mode=\"multiple\"\n allowClear\n style={{ width: '100%' }}\n placeholder=\"Please select\"\n\n >\n {results.tax_types.map(item => {\n return <Select.Option value={item.code}>{item.code}<small> - <em>{item.name}</em></small></Select.Option>\n })}\n </Select>\n </Form.Item>\n\n <Form.Item initialValue={(groupCurrent._record.tax_b) ? groupCurrent._record.tax_b.split(\"\") : []} label=\"Tax B\" name=\"tax_b\">\n <Select\n mode=\"multiple\"\n allowClear\n style={{ width: '100%' }}\n placeholder=\"Please select\"\n\n >\n {results.tax_types.map(item => {\n return <Select.Option value={item.code}>{item.code}<small> - <em>{item.name}</em></small></Select.Option>\n })}\n </Select>\n </Form.Item>\n\n <Form.Item initialValue={(groupCurrent._record.tax_3) ? groupCurrent._record.tax_3.split(\"\") : []} label=\"Tax 3\" name=\"tax_3\">\n <Select\n mode=\"multiple\"\n allowClear\n style={{ width: '100%' }}\n placeholder=\"Please select\"\n\n >\n {results.tax_types.map(item => {\n return <Select.Option value={item.code}>{item.code}<small> - <em>{item.name}</em></small></Select.Option>\n })}\n </Select>\n </Form.Item> */}\n\n <Divider style={{ \"margin\": \"13px 0px\" }} dashed />\n <div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setGroupVisible(false)}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Save</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </>\n )\n\n\n }\n\n const drawRateEdit = () => {\n rate_form.resetFields();\n return (\n <>\n <Typography.Title level={5}>{(rateCurrent._new) ? \"New tax rate\" : \"Edit tax rate\"}</Typography.Title>\n <Divider style={{ \"margin\": \"15px 0px\" }} dashed />\n <Form layout=\"vertical\" form={rate_form} onFinish={(_f) => updateRate(_f, rateCurrent._index, rateCurrent._new)}>\n <Form.Item initialValue={rateCurrent._record.id} hidden name=\"id\">\n <Input />\n </Form.Item>\n <Form.Item initialValue={rateCurrent._record.code} hidden name=\"code\">\n <Input />\n </Form.Item>\n\n <Form.Item rules={[{ required: true, message: \"Label is required.\" }]} initialValue={rateCurrent._record.name} label=\"Label\" name=\"name\">\n <Input maxLength={6} placeholder=\"Label...\" />\n </Form.Item>\n <Form.Item rules={[{ required: true, message: \"Rate is required.\" }]} initialValue={rateCurrent._record.rate} label=\"Tax Rate\" name=\"rate\">\n <InputNumber stringMode maxLength={5} step=\"0.001\" min={0} max={100} style={{ \"width\": \"100%\" }} placeholder=\"Rate...\" />\n </Form.Item>\n <Divider style={{ \"margin\": \"13px 0px\" }} dashed />\n <div className=\"shim\" /><div className=\"shim\" />\n <div style={{ \"float\": \"right\" }}>\n <Space>\n <Button onClick={() => setRateVisible(false)}>Cancel</Button>\n <Button htmlType=\"submit\" type=\"primary\">Save</Button>\n </Space>\n </div>\n <br clear=\"all\" />\n </Form>\n </>\n )\n }\n\n\n const rate_columns = [\n { key: \"space\", width: \"10px\" },\n { title: <small>Code</small>, dataIndex: 'code', key: 'code' },\n { title: <small>Name</small>, dataIndex: 'name', key: 'name' },\n { title: <small>Rate</small>, dataIndex: 'rate', key: 'rate' },\n {\n title: <small></small>, width: 76, dataIndex: 'actions', key: 'actions', render: (e, f, i) => {\n return (results.has_edit_permission) ? <>\n <Space>\n <Button onClick={() => {\n setRateCurrent(\n {\n _record: { name: f.name, code: f.code, rate: f.rate, id: f.id },\n _index: i,\n _new: false,\n }\n )\n setRateVisible(true);\n }} size=\"small\" type=\"primary\"><small><EditOutlined /></small></Button>\n <Popconfirm onConfirm={() => removeRate(i)} title=\"Are you sure?\"><Button size=\"small\" danger type=\"primary\"><small><DeleteOutlined /></small></Button></Popconfirm>\n </Space>\n </> : \"\"\n }\n },\n ]\n\n const code_columns = [\n { key: \"space\", width: \"10px\" },\n { title: <small>Description</small>, dataIndex: 'name', key: 'name' },\n { title: <small>Cust code</small>, dataIndex: 'code', key: 'code' },\n {\n title: <small>Tax 1</small>, dataIndex: 'tax_1', key: 'tax_1', render: (e) => {\n return (e) ? e.split(\"\").join(\",\") : \"\"\n }\n },\n // {\n // title: <small>Tax 2</small>, dataIndex: 'tax_2', key: 'tax_2', render: (e) => {\n // return (e) ? e.split(\"\").join(\",\") : \"\"\n // }\n // },\n // {\n // title: <small>Tax B</small>, dataIndex: 'tax_b', key: 'tax_b', render: (e) => {\n // return (e) ? e.split(\"\").join(\",\") : \"\"\n // }\n // },\n // {\n // title: <small>Tax 3</small>, dataIndex: 'tax_3', key: 'tax_3', render: (e) => {\n // return (e) ? e.split(\"\").join(\",\") : \"\"\n // }\n // },\n {\n title: <small></small>, width: 76, dataIndex: 'actions', key: 'actions', render: (e, f, i) => {\n return (results.has_edit_permission) ? <>\n <Space>\n <Button onClick={() => {\n setGroupCurrent(\n {\n // _record: { name: f.name, code: f.code, tax_1: f.tax_1, tax_2: f.tax_2, tax_b: f.tax_b, tax_3: f.tax_3, id: f.id },\n _record: { name: f.name, code: f.code, tax_1: f.tax_1, id: f.id },\n _index: i,\n _new: false,\n }\n )\n setGroupVisible(true);\n }} size=\"small\" type=\"primary\"><small><EditOutlined /></small></Button>\n <Popconfirm onConfirm={() => removeGroup(i)} title=\"Are you sure?\"><Button size=\"small\" danger type=\"primary\"><small><DeleteOutlined /></small></Button></Popconfirm>\n </Space>\n </> : \"\"\n }\n },\n ]\n\n const getData = () => {\n return results.tax_types;\n }\n\n return (\n <>\n <Modal destroyOnClose width={300} title={null} footer={null} onCancel={() => setRateVisible(false)} visible={rateVisible}>\n {drawRateEdit()}\n </Modal>\n\n <Modal destroyOnClose width={300} title={null} footer={null} onCancel={() => setGroupVisible(false)} visible={groupVisible}>\n {drawGroupEdit()}\n </Modal>\n\n\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Tax Preferences\"\n description={(results.has_edit_permission) ? \"Use this page to set tax rates and customer codes.\" : \"Use this page to view tax rates and customer codes\"}\n button={<>\n <conditional.true value={(results.has_edit_permission)}>\n <Button disabled={(!changed)} onClick={() => save()} size=\"small\" type=\"primary\"><small>Save changes</small></Button>\n </conditional.true>\n </>}\n />\n\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n\n <Row gutter={20}>\n <Col span={12}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <div className=\"folders\">\n\n <conditional.true value={(results.has_edit_permission)}>\n <div style={{ \"float\": \"right\" }}><Button disabled={(results.tax_types.length > 25)} onClick={() => {\n setRateCurrent(\n {\n _record: { name: \"\", code: \"\", rate: \"\", id: Math.random() * 99999 },\n _index: 0,\n _new: true,\n }\n )\n setRateVisible(true);\n }\n } type=\"primary\" size=\"small\"><small>Create rate</small></Button></div>\n </conditional.true>\n <small>Tax Rates</small>\n </div>\n <div style={{ \"padding\": \"0px\" }}>\n <Table\n rowKey={\"id\"}\n pagination={false}\n style={{ \"borderBottom\": \"none\" }}\n rowClassName={\"hideHover\"}\n size=\"small\"\n columns={rate_columns}\n dataSource={results.tax_types}\n />\n </div>\n </Card>\n </Col>\n\n <Col span={12}>\n <Card bodyStyle={{ \"padding\": \"0px\" }}>\n <div className=\"folders\">\n\n <conditional.true value={(results.has_edit_permission)}>\n <div style={{ \"float\": \"right\" }}><Button disabled={(results.tax_types.length > 25)} onClick={() => {\n setGroupCurrent(\n {\n // _record: { name: \"\", code: \"\", tax_1: \"\", tax_2: \"\", tax_b: \"\", tax_3: \"\", id: Math.random() * 99999 },\n _record: { name: \"\", code: \"\", tax_1: \"\", id: Math.random() * 99999 },\n _index: 0,\n _new: true,\n }\n )\n setGroupVisible(true);\n }\n } type=\"primary\" size=\"small\"><small>Create code</small></Button></div>\n </conditional.true>\n\n\n\n <small>Customer Codes</small>\n </div>\n <div style={{ \"padding\": \"0px\" }}>\n <Table\n pagination={false}\n rowKey={\"id\"}\n style={{ \"borderBottom\": \"none\" }}\n rowClassName={\"hideHover\"}\n size=\"small\"\n columns={code_columns}\n dataSource={results.tax_groups}\n />\n </div>\n </Card>\n </Col>\n\n </Row>\n\n </div>\n </Layout.Content>\n </Layout>\n </>\n )\n}","import React, {useEffect, useState} from \"react\";\nimport { Spin, Result, Button } from \"antd\";\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { apiCall } from \"./utils/Api\";\nimport { useSession } from \"./utils/Session\";\n\nexport default function ReloadStore() {\n const location = useLocation();\n const history = useHistory(); \n const [, setSession] = useSession(); \n const {id = false, path = \"/purchasing/browse\"} = location.state; \n const [error, setError] = useState(\"\");\n\n const changeCorp = () =>{\n if(id){\n apiCall(\"account/setCorp\", {corp_id : id}, (_status, _result) =>{\n if(_status){\n setSession(_result);\n window.store_id = _result.store_id; \n apiCall(\"store/getSettings\", {}, (_s, _r) =>{\n window.sitesettings = _r;\n \n history.push(path);\n })\n } else {\n setError(_result.error);\n }\n })\n } else {\n history.back(); \n }\n }\n\n useEffect(changeCorp, [history, id, path, setSession]);\n\n if(!id){\n return(<></>)\n }\n \n const loadAnimation = <LoadingOutlined style={{ fontSize: 45 }} spin />\n\n return (\n <> \n <div className=\"shim\" style={{ \"minHeight\": \"120px\", \"height\" : \"calc(50vh - 250px)\" }}></div>\n <Result\n status={(error) ? \"warning\" : \"success\"}\n icon={(error) ? false : <Spin indicator={loadAnimation} />}\n title={(error) ? \"Failed to switch store\" : \"Reloading...\"}\n subTitle={(error) ? <>{error} <br /><br /> <Button onClick={() => history.push(path)}>Return to site</Button></> : \"This will only take a moment...\"}\n />\n </>\n )\n}\n\n\n","import React from \"react\";\nimport { motion } from \"framer-motion\"\nexport default function Ani(props) {\n\n\n return (\n <motion.div>\n {props.children}\n </motion.div>\n )\n}","import { Checkbox, Badge, Modal } from \"antd\";\nimport Cookies from \"js-cookie\";\nimport { useState } from \"react\";\nimport { DatabaseFilled } from '@ant-design/icons';\nexport default function LiveToggle() {\n\n \n const [isLive, setIsLive] = useState(Cookies.get(\"l\") || \"false\");\n\n // Don't show toggle in production\n let mode = process.env.REACT_APP_API || 'inherit';\n if (mode === \"live\" || mode === \"staging\") {\n return (<></>);\n }\n\n const showModal = () => {\n\n Modal.info({\n title: \"Switch data source\",\n width: 300,\n content: (\n <>\n <div className=\"shim\" /><div className=\"shim\" />\n <Checkbox defaultChecked={(isLive === \"true\")} onChange={(e) => Cookies.set(\"l\", (e.target.checked) ? \"true\" : \"false\")}>Use live data?</Checkbox>\n </>\n ),\n onOk : () => {\n window.location.reload(); \n }\n })\n\n }\n\n let _style = {\n boxShadow: \"0px 2px 3px 1px #aaa\",\n width: \"25px\",\n position: \"fixed\",\n zIndex: \"1000\",\n top: \"-1px\",\n left: \"20px\",\n backgroundColor: \"#fff\",\n borderBottomLeftRadius: \"3px\",\n borderBottomRightRadius: \"3px\",\n cursor: \"pointer\",\n margin: \"0 auto\"\n }\n\n\n return (\n <div onClick={() => showModal()} style={_style} >\n <div style={{\"height\" : \"2px\"}} className=\"shim\" />\n <Badge offset={[9, 0]} status={(isLive === \"true\") ? \"success\" : \"default\"} />\n <div style={{\"height\" : \"2px\"}} className=\"shim\" />\n </div>\n )\n}","import React, { useState } from \"react\"\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\"\nimport { Button, DatePicker, Form, Layout, Space, Typography } from \"antd\"\nimport { FilePdfOutlined } from '@ant-design/icons';\nimport moment from \"moment-timezone\"\nimport { apiCall } from \"../../utils/Api\";\n\nexport default function CustomerSalesExport() {\n\n const [filters, setFilters] = useState({ start_date: moment().add(-1, \"year\"), end_date: moment() })\n\n\n \n const generateFile = () => {\n\n let obj = {\n start_date : filters.start_date.unix(), \n end_date : filters.end_date.unix()\n }\n\n apiCall(\"sales/export/start\", obj, (_status, _result) =>{\n if(_status){\n window.open(\"/report/\" + _result.progress_report_id, \"_blank\")\n }\n })\n }\n \n return (\n <>\n <Layout className=\"layout\">\n <LayoutHeader\n title=\"Customer Sales Export\"\n description={<>Use this page to configure and generate a customer sales report Excel document {(!window.sitesettings.allow_custsalesexport && <><br /> \n <span style={{\"color\" : \"#f00\"}}>* Using <em>Customer Sales Export</em> requires updating to the most recent version of bookmanager and sending an up-to-date backup. </span></>)}</>}\n filters={<>\n <Form>\n <Space wrap size={[5, 0]}>\n <Form.Item initialValue={[filters.start_date, filters.end_date]} name=\"range\" label=\"Date and Time\" noStyle>\n <DatePicker.RangePicker disabled={!window.sitesettings.allow_custsalesexport} onChange={(e) => setFilters({ ...filters, \"start_date\": e[0], \"end_date\": e[1] })} className=\"inputsmall\" size=\"small\" style={{ \"width\": \"100%\" }} format=\"MMM Do YYYY\" />\n </Form.Item>\n <Button disabled={!window.sitesettings.allow_custsalesexport} onClick={() => generateFile()} size=\"small\" type=\"primary\"><small><FilePdfOutlined /> Generate report</small></Button>\n \n </Space>\n </Form><br />\n </>}\n />\n <Layout.Content style={{ \"padding\": \"0px\" }} >\n <div style={{ \"padding\": \"20px\" }}>\n <Typography.Title level={5}>Instructions</Typography.Title>\n <Typography.Paragraph type=\"secondary\">\n Select a date range to export customer linked sales to an Excel spreadsheet. Sales are taken from your most recent Bookmanager software backup, and will only include historical (not current) sales that have a customer account attached and have been tendered off in the Bookmanager point-of-sale. Held sales and quotes are not included. Online orders that have been processed and tendered off in the Bookmanager POS will be included. Only prepaid items that have been picked up / finalized (PrpyRdmd status) will be included. Gift card sales and redemptions are not included.\n </Typography.Paragraph>\n <Typography.Paragraph>\n <strong>The customer account attached to sales is the main customer account, and may not reflect the ship to or bill to account. Therefore, this report should not be used to manage order fulfillment.</strong>\n </Typography.Paragraph>\n </div>\n </Layout.Content>\n </Layout>\n </>\n\n )\n}","import { Button, message, Progress, Result } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { apiCall, apiDownload } from \"../utils/Api\";\n\nexport default function ProcessReport(props) {\n\n // get the process id from the browser param\n const { process_id = \"\" } = useParams();\n\n // set defaults\n const [report, setReport] = useState({\n progress: 0,\n eta_seconds: null,\n completed: false,\n })\n\n const getProgress = () => {\n apiCall(\"sales/export/progress\", { progress_report_id: process_id }, (_status, _result) => {\n if (_status) {\n console.log(_result);\n setReport(_result)\n if (!_result.completed) {\n // not done, poll again\n setTimeout(getProgress, 100);\n } \n } else {\n message.error(_result.error)\n }\n })\n }\n\n const downloadReport = () => {\n apiDownload({ progress_report_id: process_id }, \"sales/export/get\");\n }\n\n useEffect(getProgress, []);\n\n\n const drawETA = () => {\n\n\n if(!report.completed){\n\n if(report.eta_seconds === null){\n return \"Waiting...\"\n }\n\n if(report.progress === 99){\n return \"Converting....\"\n }\n\n return \"Approx \" + report.eta_seconds + \" seconds remaining...\"\n }\n\n \n return \"\";\n }\n\n return (\n <div style={{\"width\" : \"300px\", \"margin\" : \"0 auto\", \"marginTop\" : \"80px\", \"textAlign\" : \"center\"}}>\n <Progress type=\"circle\" percent={report.progress} width={80} />\n <br /> <br /> \n <p style={{\"textAlign\" : \"center\", \"fontSize\" : \"16px\", \"fontWeight\" : \"500\"}}>{drawETA()} </p>\n <Button disabled={(!report.completed)} onClick={() => downloadReport()}>Download</Button>\n </div>);\n\n}","import { Button, Space, Row, Col, Tooltip, Input, Divider } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport DropMenu from \"../../components/DropMenu\";\nimport { CheckSquareFilled, CloseSquareFilled, CheckOutlined } from '@ant-design/icons';\nimport { bestsellerColor, successColor } from \"../../utils/Utils\";\nimport Iscroller from \"../../components/Iscroller\";\nexport default function TimeOfDayFilters(props) {\n\n const { resetButton = () => { }, groupBy = { cat: [] }, grouping = \"\", callback = () => { }, headers = { groupby_labels: { \"test\": [\"test\"] } } } = props;\n const [searchFilters, setSearchFilters] = useState({});\n const [refine, setRefine] = useState(\"\");\n const [changed, setChanged] = useState(false)\n const [vistoggle, setVistoggle] = useState(\"\");\n const [opened, setOpened] = useState(\"\");\n\n useEffect(() => {\n if(!groupBy.hasOwnProperty(\"cat\") && !groupBy.hasOwnProperty(\"catcat2\") && !groupBy.hasOwnProperty(\"section\") && !groupBy.hasOwnProperty(\"shop\")){\n setSearchFilters({});\n }\n }, [groupBy])\n \n const check = (_filter, _key, _excluded = false) => {\n\n\n if (_excluded) {\n _filter = \"-\" + _filter;\n }\n if (searchFilters.hasOwnProperty(_key) && searchFilters[_key].includes(_filter)) {\n return true;\n } else {\n return false;\n }\n }\n\n const checkAny = (_key, _exclude = false) => {\n if (searchFilters.hasOwnProperty(_key) && searchFilters[_key].length > 0) {\n if (searchFilters[_key][0].substr(0, 1) === \"-\") {\n if (_exclude) { return true; }\n } else {\n if (!_exclude) { return true; }\n }\n }\n return false;\n }\n\n const toggleCategory = (_key, _filter, _augment = false, _exclude = false, go = false) => {\n\n \n \n let value = (searchFilters.hasOwnProperty(_key)) ? [...searchFilters[_key]] : []\n if (_exclude) {\n if (value.includes(\"-\" + _filter)) {\n value = [...searchFilters[_key]].filter(item => item !== \"-\" + _filter);\n } else {\n value.push(\"-\" + _filter);\n }\n } else {\n if (value.includes(_filter)) {\n value = [...searchFilters[_key]].filter(item => item !== _filter);\n } else {\n value.push(_filter);\n }\n }\n\n if (!_augment) {\n value = [_filter];\n }\n\n \n setSearchFilters({ ...searchFilters, [_key]: value });\n setChanged(true);\n \n if (go) {\n setVistoggle(\"close\");\n callback({ ...searchFilters, [_key]: [] });\n }\n return;\n\n }\n\n const resetFilter = (_key) => {\n setSearchFilters({ ...searchFilters, [_key]: [] });\n callback({ ...searchFilters, [_key]: [] });\n setVistoggle(\"close\");\n }\n\n const drawOptions = (_key) => {\n\n return (\n <div style={{ \"float\": \"right\", \"fontWeight\": \"normal\", \"color\": \"#ccc\", \"fontSize\": \"9px\", \"marginRight\": \"0px\", \"marginTop\": \"0px\" }}>\n <Space align=\"center\" size={3}>\n {/* <div className=\"ant-radio-group-solid ant-radio-group-small\">\n <Button type={(grouping === _key) ? \"primary\" : \"default\"} onClick={() => { setGrouping(_key); setChanged(true); setVistoggle(\"close\"); callback(searchFilters, _key); }} style={{ \"borderRight\": \"none\", \"borderRadius\": \"2px 0 0 2px\" }} className=\"tiny-radio\" >\n <Tooltip mouseEnterDelay={0.5} title={<>Separate rows</>}>\n <small><MenuOutlined /></small>\n </Tooltip>\n </Button>\n <Button type={(grouping !== _key) ? \"primary\" : \"default\"} onClick={() => { setGrouping(\"\"); setChanged(true); setVistoggle(\"close\"); callback(searchFilters, \"\"); }} style={{ \"borderRadius\": \"0 2px 2px 0\" }} className=\"tiny-radio\" >\n <Tooltip mouseEnterDelay={0.5} title={<>Amalgamate rows</>}>\n <small><LineOutlined /></small>\n </Tooltip>\n </Button>\n </div> */}\n <Col flex={\"25px\"}>\n <Button disabled={(!changed)} onClick={() => {\n callback({ ...searchFilters });\n setVistoggle(\"close\");\n\n }} style={{ \"padding\": \"0px 7px\", \"marginTop\": \"0px\" }} size=\"small\" type=\"primary\" className=\"tiny-btn\"><small>Go!</small></Button>\n </Col>\n <Button style={{ \"marginTop\": \"0px\" }} onClick={() => resetFilter(_key)} disabled={!(searchFilters.hasOwnProperty(_key) && searchFilters[_key].length > 0)} size=\"small\" className=\"tiny-btn\" type=\"primary\"><small>Reset</small></Button>\n </Space>\n </div>\n )\n }\n\n const drawFilter = (_filter, _key) => {\n\n let _included = check(_filter.v, _key);\n let _excluded = check(_filter.v, _key, true);\n let any_included = checkAny(_key);\n let any_excluded = checkAny(_key, true);\n // let count = (searchFilters.hasOwnProperty(_key)) ? searchFilters[_key].length : 0;\n let hasEnglish = (_filter.hasOwnProperty(\"e\"));\n\n return (\n <Row key={_filter.v}>\n <Col flex={\"auto\"}><div style={{ \"maxWidth\": \"160px\", \"overflow\": \"hidden\", \"whiteSpace\": \"nowrap\", \"textOverflow\": \"ellipsis\", \"cursor\": \"pointer\" }} onClick={() => toggleCategory(_key, _filter.v, false, false, true)}><small>{(hasEnglish) ? _filter.e : _filter.v}</small></div></Col>\n <Col flex={\"50px\"} >\n <div style={{ \"float\": \"right\", \"marginRight\": \"12px\" }}>\n <Space size={2}>\n <div><CloseSquareFilled onClick={() => toggleCategory(_key, _filter.v, true, true)} key={\"exclude\"} style={{ \"color\": (_excluded) ? bestsellerColor : \"#bbb\", \"opacity\": (!any_included) ? \"1\" : \"0.2\", \"pointerEvents\": (!any_included) ? \"auto\" : \"none\" }} /></div>\n <div><CheckSquareFilled onClick={() => toggleCategory(_key, _filter.v, true, false)} key={\"include\"} style={{ \"color\": (_included) ? successColor : \"#bbb\", \"opacity\": (!any_excluded) ? \"1\" : \"0.2\", \"pointerEvents\": (!any_excluded) ? \"auto\" : \"none\" }} /></div>\n </Space>\n </div>\n </Col>\n </Row>);\n\n }\n\n const drawFilters = (_key) => {\n\n if (!headers.seen.hasOwnProperty(_key)) {\n return (<></>);\n }\n\n return (\n\n <Iscroller\n refine={refine}\n opened={opened}\n check={check}\n item_key={_key}\n data={headers.seen[_key]}\n interator={(item) => {\n return drawFilter(item, _key)\n }}\n />\n )\n\n return\n\n }\n\n\n\n\n\n const findLabel = (_key, _value) => {\n\n // Remove the fist char if it's a dash - (excluded)\n if (_value[0] === '-') {\n _value = _value.slice(1);\n }\n\n let ret = headers.seen[_key].find(item => item.v === _value);\n if (ret) {\n\n if (ret.hasOwnProperty(\"e\")) {\n return ret.e;\n } else {\n return _value;\n }\n } else {\n return _value;\n }\n }\n\n\n const drawSelectionToolTip = (_key) => {\n let ret = \"\";\n switch (_key) {\n case \"rcvdmonth\":\n ret = \"Filter the results by adding and hiding selected items. Breakdown the results by the date the goods were initially received\";\n break;\n case \"specord\":\n ret = \"Filter the results by adding and hiding selected items. S/O are items that were both ordered for and sold to the same customer (i.e. a special order). \";\n break;\n default:\n ret = \"Filter the results by adding and hiding selected items. \";\n break\n }\n return (<small>{ret}</small>)\n }\n\n const drawLabelToolTip = (_key, _open = false) => {\n let ret = \"\";\n switch (_key) {\n case \"rcvdmonth\":\n ret = \"Filter the results by adding and hiding selected items. Breakdown the results by the date the goods were initially received\";\n break;\n case \"specord\":\n ret = \"Filter the results by adding and hiding selected items. S/O are items that were both ordered for and sold to the same customer (i.e. a special order). \";\n break;\n default:\n ret = (_open) ? \"Group the results as one row\" : \"Separate the results into individual rows\";\n break\n }\n return (<small>{ret}</small>)\n }\n\n\n const drawBrowseLabel = (_key) => {\n let ret = \"\";\n if (searchFilters.hasOwnProperty(_key) && searchFilters[_key].length > 0) {\n // check if included or excluded\n let inc = (searchFilters[_key][0][0] === '-') ? \"excluded\" : \"included\";\n if (searchFilters[_key].length > 1) {\n ret = searchFilters[_key].length + \" \" + inc;\n } else {\n ret = findLabel(_key, searchFilters[_key][0]) || \"1 \" + inc;\n }\n } else {\n ret = \"Choose...\";\n }\n return (<div style={{ \"overflow\": \"hidden\", \"textOverflow\": \"ellipsis\" }}><Tooltip title={drawSelectionToolTip(_key)}><nobr>{ret}</nobr></Tooltip></div>)\n }\n\n const drawGroupByLabels = () => {\n\n if (!headers.groupby_labels) {\n return;\n }\n\n\n let _filtered = Object.keys(headers.groupby_labels);\n\n\n\n return _filtered.map(key => {\n\n let label = headers.groupby_labels[key];\n\n if (label) {\n return (\n <div className=\"bc\" style={{ \"border\": '1px solid', \"width\": \"100%\" }}>\n <div>\n <div style={{ \"textAlign\": \"center\", \"display\": \"block\", \"padding\": \"3px 10px\" }}><small><nobr>{((grouping === key) && <><CheckOutlined />  </>)}{label}</nobr></small></div>\n <div style={{ \"backgroundColor\": \"#177ddc\", \"color\": \"#fff\", \"cursor\": \"pointer\" }}>\n <DropMenu onOpen={() => {\n setOpened(key);\n }} custom_button selected={(key === grouping)} vistoggle={vistoggle} setVistoggle={setVistoggle} onClose={() => {\n if (changed) {\n if (!vistoggle) {\n callback({...searchFilters});\n }\n }\n setChanged(false);\n setOpened(\"\");\n setRefine(\"\");\n\n }} label={<div style={{ \"maxWidth\": \"100%\", \"overflow\": \"hidden\" }} className=\"c\"><Space align=\"center\"><div style={{ \"width\": \"190px\" }}><nobr><strong>{label}</strong></nobr></div>{drawOptions(key)} </Space></div>} title={<div style={{ \"padding\": \"5px 0px\", \"textAlign\": \"center\" }}>{drawBrowseLabel(key)}</div>}>\n <Input autoFocus value={refine} onChange={(e) => setRefine(e.target.value)} size=\"small\" placeholder=\"Keyword...\" />\n\n <Divider dashed style={{ \"margin\": \"10px 0px\" }} />\n <div className=\"c\">{drawFilters(key)}</div>\n </DropMenu>\n </div>\n </div>\n </div>\n\n )\n\n }\n\n })\n\n }\n\n\n\n return (\n <>\n <div style={{ \"marginTop\": \"-10px\" }}>\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"stretch\", \"gap\": \"2px\" }}>\n {drawGroupByLabels()}\n \n </div>\n <div>{resetButton()}</div>\n </div>\n <div className=\"shim\" />\n </>\n )\n\n}","import { useEffect, useState } from \"react\";\nimport { Slider } from \"antd\";\nimport { addCommas } from \"../../utils/Utils\";\n\nexport default function MultiPointSlider(props) {\n\n\n const { steps = [], onChange = () => { }, max = 100, unit = \"price\" } = props;\n const [sliderValue, setSliderValue] = useState(steps); // Initial values for the slider\n\n\n useEffect(() => {\n setSliderValue(steps);\n }, [steps])\n\n\n // Throttled change handler\n const handleChange = (value) => {\n setSliderValue(value);\n onChange(value);\n }\n\n\n\n return (\n <div style={{ width: '700px', margin: 'auto' }}>\n <Slider\n range\n min={0}\n max={max}\n className=\"custom-slider\"\n step={1}\n onAfterChange={handleChange}\n onChange={(v) => setSliderValue(v)}\n value={sliderValue}\n // value={sliderValue}\n // onChange={handleChange}\n // marks={{\n // 0: <small>0</small>,\n // [max]: (unit === \"price\") ? \"$\" + addCommas(max) : addCommas(max)\n // }}\n />\n </div>\n );\n};","import { Divider, Space, Spin, Tooltip } from \"antd\";\nimport moment from \"moment-timezone\";\nimport React, { useEffect, useState } from \"react\";\nimport { addCommas } from \"../../utils/Utils\";\nimport MultiPointSlider from \"./MultiPointSlider\";\n\nexport default function CalandarGrid(props) {\n\n const { heatmap = {}, unit = \"price\", loading = false } = props;\n const { legend = [], rows = [], max = 0 } = heatmap;\n const size = 20;\n const space = 1;\n const colors = [\"#55555533\", \"#17b87244\", \"#03ae9977\", \"#37abcdDD\", \"#0782c4CC\", \"#096ea3\"]\n\n\n function calculateEqualSteps(maxValue) {\n\n \n const numberOfSteps = 6;\n const stepSize = Math.floor(maxValue / (numberOfSteps - 1));\n let _steps = [];\n \n for (let i = 0; i < numberOfSteps; i++) {\n _steps.push(stepSize * i);\n }\n \n \n return _steps;\n }\n\n const [steps, setSteps] = useState(calculateEqualSteps(max));\n\n\n useEffect(() => {\n\n setSteps(calculateEqualSteps(max))\n\n }, [unit])\n\n function getMaxIndex(arr = [], num) {\n let maxIndex = -1;\n\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] < num) {\n maxIndex = i;\n }\n }\n\n return maxIndex + 1;\n }\n\n const drawRow = (_item, index) => {\n return rows.map(item => {\n let count = item.days[index];\n\n let color_index = getMaxIndex(steps, count)\n return (\n <Tooltip title={\n <small>\n <div style={{ \"opacity\": \"0.6\" }}>{moment(item.monday_epoch * 1000).add(index, \"days\").format(\"MMM Do, YYYY\")}</div>\n <div>{(unit === \"price\") ? \"$\" + addCommas(item.days[index]) : item.days[index]}</div>\n </small>} >\n <div style={{ \"backgroundColor\": colors[color_index], \"width\": size + \"px\", \"lineHeight\": \"0\", \"height\": size + \"px\" }}>\n </div>\n </Tooltip>\n )\n })\n }\n\n const draw = () => {\n\n let _days = [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"];\n let _m = \"\";\n return (\n <Spin spinning={loading}>\n \n \n \n <div style={{\"height\" : \"300px\"}}>\n <div className=\"float-flex\">\n <div className=\"c\">Days</div>\n <div style={{\"textAlign\" : \"right\"}}>\n <Space size={20}>\n {steps.map((item, index) => {\n let _label = (unit === \"price\") ? \"$0\" : \"0\";\n if (index !== 0) {\n if ((unit === \"price\")) {\n _label = \"$\" + addCommas(steps[index - 1]) + \"-$\" + addCommas(steps[index]);\n } else {\n _label = steps[index - 1] + \"-\" + steps[index];\n }\n }\n return (\n <>\n <Space>\n <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": colors[index] }}></div>\n <div style={{ \"opacity\": \"0.7\", \"fontSize\": \"12px\" }}>{_label}</div>\n </Space>\n </>\n )\n })}\n </Space>\n {(max && <MultiPointSlider unit={unit} max={max} steps={steps} onChange={(_a) => setSteps(_a)} />)}\n </div>\n \n </div>\n <Divider dashed />\n <div style={{ \"width\": \"100%\", \"textAlign\": \"center\", \"padding\": \"20px\" }}>\n <Space size={space} style={{ \"lineHeight\": \"0px\" }} direction=\"vertical\">\n <div style={{ \"display\": \"flex\", \"justifyContent\": \"space-between\", \"marginLeft\": \"32px\" }} key={\"labels\"} size={[space]}>{rows.map((item) => {\n let _d = moment(item.monday_epoch * 1000).format(\"MMM\").toUpperCase();\n if (_d === _m) {\n _d = \"\"\n } else {\n _m = _d;\n }\n return (<div style={{ \"fontSize\": \"10px\", \"opacity\": \".5\" }}>{_d}</div>)\n })}</div>\n <div className=\"shim\" /><div className=\"shim\" />\n {_days.map((item, index) => {\n return <Space key={item} size={[space]}><div style={{ \"width\": 30 + \"px\", \"fontSize\": \"10px\", \"opacity\": \".5\", \"textAlign\": \"left\" }}><small>{(!loading && item)}</small></div>{drawRow(item, index)}</Space>\n })}\n </Space>\n </div>\n </div>\n </Spin>\n )\n }\n\n\n return draw();\n}","import React, { useEffect, useState } from \"react\"\nimport LayoutHeader from \"../../layouts/partials/LayoutHeader\"\nimport { Button, DatePicker, Form, Layout, Space, message, Spin, Select, Divider, Checkbox, Affix } from \"antd\"\nimport { Column } from '@ant-design/charts';\nimport moment from \"moment-timezone\"\nimport { apiCall } from \"../../utils/Api\";\nimport { addCommas } from \"../../utils/Utils\";\nimport TimeOfDayFilters from \"../analytics/TimeOfDayFilters\";\nimport CalendarGrid from \"../analytics/CalandarGrid\";\n\n\nexport default function TimeOfDaySales() {\n\n const [results, setResults] = useState({ price_days: [], units_days: [], txn_days: [] });\n const [loading, setLoading] = useState(true);\n const [filters, setFilters] = useState({ start_date: moment().add(-1, \"year\"), end_date: moment() })\n const [groupBy, setGroupBy] = useState({ cat: [] });\n const [unit, setUnit] = useState(\"price\");\n const [dates, setDates] = useState([filters.start_date, filters.end_date]);\n const [value, setValue] = useState([filters.start_date, filters.end_date]);\n\n const [startDate, setStartDate] = useState(filters.start_date);\n const [endDate, setEndDate] = useState(filters.end_date);\n\n const disableRange = (current) => {\n\n const tooLate = startDate && current.diff(startDate, 'days') > 365;\n const tooEarly = endDate && endDate.diff(current, 'days') > 365;\n return !!tooEarly || !!tooLate;\n };\n\n const onOpenChange = (open) => {\n if (open) {\n setDates([null, null]);\n } else {\n setDates(null);\n }\n };\n\n const resetAllButton = () => {\n return (\n <Button\n onClick={() => {\n setGroupBy({});\n setStartDate(moment().add(-1, \"year\"));\n setEndDate(moment())\n }} type=\"link\" size=\"small\"><small>Reset</small>\n </Button>\n )\n }\n\n const getGroupBy = () => {\n\n let obj = {}\n let gb = { ...groupBy };\n Object.keys(gb).map(_key => {\n\n if (gb[_key].length > 0 && gb[_key][0].substr(0, 1) === \"-\") {\n // exclude\n obj[_key] = {}\n obj[_key].inc = [];\n obj[_key].exc = gb[_key].map(item => item.replace(\"-\", \"\"));\n }\n\n if (gb[_key].length > 0 && gb[_key][0].substr(0, 1) !== \"-\") {\n // exclude\n obj[_key] = {}\n obj[_key].inc = gb[_key];\n obj[_key].exc = [];\n }\n\n })\n\n return JSON.stringify(obj);\n\n }\n\n const getSales = () => {\n setLoading(true)\n\n let params = {\n start_date: startDate.tz('America/Los_Angeles').startOf(\"day\").unix(),\n end_date: endDate.tz('America/Los_Angeles').endOf(\"day\").unix(),\n group_by: getGroupBy()\n }\n\n apiCall(\"reports/analytics/salesByWeekdayHour\", params, (_status, _results) => {\n if (_status) {\n setResults(_results);\n } else {\n message.error(_results.error)\n }\n setLoading(false)\n })\n }\n useEffect(getSales, [startDate, endDate, groupBy]);\n\n const daysToData = (_days = []) => {\n\n if (!Array.isArray(_days)) {\n return [];\n }\n\n let arr = [];\n _days.forEach(element => {\n const { name = \"\", min = 0, avg = 0, max = 0, min_label = \"min\", max_label = \"max\", avg_label = \"avg\" } = element;\n arr.push({ time: name, type: \"High\", value: max, label: max_label })\n arr.push({ time: name, type: \"Average\", value: avg, label: avg_label })\n arr.push({ time: name, type: \"Low\", value: min, label: min_label })\n });\n return arr;\n }\n\n function convertToAMPM(hour) {\n if (hour >= 0 && hour <= 23) {\n var ampm = hour >= 12 ? 'pm' : 'am';\n var convertedHour = hour % 12 || 12;\n return convertedHour + ampm;\n } else {\n return 'Invalid hour';\n }\n }\n\n const customSortOrder = { \"High\": 1, \"Average\": 2, \"Low\": 3 };\n\n function sortByTimeThenValue(a, b) {\n // First, compare by time numerically\n const timeA = parseInt(a.time, 10);\n const timeB = parseInt(b.time, 10);\n if (timeA !== timeB) {\n return timeA - timeB;\n }\n return customSortOrder[a.type] - customSortOrder[b.type]\n }\n\n const DayHistogram = (props) => {\n\n const [filters, setFilters] = useState({\n h: false,\n a: true,\n l: false\n });\n\n const { data = [], title = \"Weekdays\" } = props;\n\n const colors = ['#a6d5af', '#64a6da', '#b1d2ec'];\n const colorObj = { \"Average\": '#64a6da', \"High\": '#a6d5af', \"Low\": '#b1d2ec' };\n\n const filterData = () => {\n let _d = [...data];\n if (!filters.h) {\n _d = _d.filter(item => item.type !== \"High\")\n }\n if (!filters.a) {\n _d = _d.filter(item => item.type !== \"Average\")\n }\n if (!filters.l) {\n _d = _d.filter(item => item.type !== \"Low\")\n }\n\n return _d;\n\n }\n\n const getColors = () => {\n let _c = [...colors];\n if (!filters.h) {\n _c = _c.filter(item => item !== \"#a6d5af\")\n }\n if (!filters.a) {\n _c = _c.filter(item => item !== \"#64a6da\")\n }\n if (!filters.l) {\n _c = _c.filter(item => item !== \"#b1d2ec\")\n }\n return _c;\n }\n\n const config = {\n data: filterData(),\n // isGroup: true,\n animation: false,\n legend: false,\n color: getColors(),\n isStack: false,\n xField: 'time',\n yField: 'value',\n\n seriesField: 'type',\n yAxis: {\n label: {\n formatter: (v) => (unit === \"price\") ? \"$\" + addCommas(v) : v,\n },\n },\n tooltip: {\n customContent: (title, items) => {\n // Constructing the tooltip content\n\n return (`\n <div class=\"g2-tooltip-title\" style=\"margin-bottom: 12px; margin-top: 12px;\">${title}</div>\n <ul class=\"g2-tooltip-list\" style=\"margin: 0px; list-style-type: none; padding: 0px;\">\n \n ${items\n .map((item) => {\n return `\n <li class=\"g2-tooltip-list-item\" data-index=\"\" style=\"list-style-type: none; padding: 0px; margin: 12px 0px;\">\n <span class=\"g2-tooltip-marker\" style=\"background: ${colorObj[item.data.type]}; width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 8px;\"></span>\n <span class=\"g2-tooltip-name\">${item.data.label}</span>:\n <span class=\"g2-tooltip-value\" style=\"display: inline-block; float: right; margin-left: 30px;\">${(unit === \"price\") ? \"$\" + addCommas(item.value) : item.value}</span>\n </li>\n `\n })\n .join('')}\n </ul>\n `)\n return `<div>${title}</div>${items\n .map((item) => {\n\n return ` <li class=\"g2-tooltip-list-item\" data-index=\"\" style=\"list-style-type: none; padding: 0px; margin: 12px 0px;\">\n <span class=\"g2-tooltip-name\">${item.data.label}</span>:\n <span class=\"g2-tooltip-value\" style=\"display: inline-block; float: right; margin-left: 30px;\">${(unit === \"price\") ? \"$\" + addCommas(item.value) : item.value}</span>\n </li>`\n return `<div>${item.data.label}: ${item.value}</div>`;\n })\n .join('')}`;\n },\n },\n // tooltip: {\n // formatter: (datum) => ({\n // name: datum.type,\n // value: (unit === \"price\") ? \"$\" + addCommas(datum.value) : datum.value,\n // }),\n // }\n };\n\n return (\n <Spin spinning={loading}>\n <div className=\"float-flex\">\n <div className=\"c\">{title}</div>\n <div style={{\"margin\" : \"-80px 0px\"}}>\n <Space size={20} style={{ \"cursor\": \"pointer\" }}>\n <div onClick={() => setFilters({ ...filters, \"h\": !filters.h })}>\n <Space>\n <Checkbox className=\"custom-checkbox1\" checked={filters.h} />\n {/* <div style={{ \"width\": \"10px\", \"height\": \"10px\", \"backgroundColor\": (filters.h) ? colors[0] : \"#ddd\" }}></div> */}\n <div style={{ \"opacity\": \"0.7\", \"fontSize\": \"12px\" }}>High</div>\n </Space>\n </div>\n <div onClick={() => setFilters({ ...filters, \"a\": !filters.a })}>\n <Space>\n <Checkbox className=\"custom-checkbox2\" checked={filters.a} />\n {/* <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": (filters.a) ? colors[1] : \"#ddd\" }}></div> */}\n <div style={{ \"opacity\": \"0.7\", \"fontSize\": \"12px\" }}>Average</div>\n </Space>\n </div>\n <div onClick={() => setFilters({ ...filters, \"l\": !filters.l })}>\n <Space>\n <Checkbox className=\"custom-checkbox3\" checked={filters.l} />\n {/* <div style={{ \"width\": \"10px\", \"height\": \"5px\", \"backgroundColor\": (filters.l) ? colors[2] : \"#ddd\" }}></div> */}\n <div style={{ \"opacity\": \"0.7\", \"fontSize\": \"12px\" }}>Low</div>\n </Space>\n </div>\n </Space>\n </div>\n </div>\n <div style={{ \"padding\": \"10px\" }}><Column {...config} /></div>\n </Spin>\n )\n };\n\n\n const drawPicker = () => {\n\n return (\n\n <Form>\n <Space wrap size={[5, 0]}>\n <Form.Item initialValue={filters.start_date} label=\"Start Date\" noStyle>\n <label><small>Start date:</small></label>\n <DatePicker\n value={startDate}\n defaultValue={value[0]}\n // onCalendarChange={(val) => setDates(val)}\n onChange={(val) => {\n\n setStartDate(val);\n if (endDate.diff(val, 'days') > 365) {\n\n setEndDate(moment(val.format(\"YYYY MM DD\")).add(365, \"days\"))\n }\n }}\n onOpenChange={onOpenChange}\n allowClear={false}\n className=\"inputsmall\" size=\"small\" style={{ \"width\": \"100%\" }} format=\"MMM Do YYYY\" />\n </Form.Item>\n\n <Form.Item initialValue={filters.end_date} label=\"End Date\" noStyle>\n <label><small>End date:</small></label>\n <DatePicker\n value={endDate}\n defaultValue={value[0]}\n disabledDate={disableRange}\n // onCalendarChange={(val) => setDates(val)}\n onChange={(val) => {\n setEndDate(val);\n\n }}\n onOpenChange={onOpenChange}\n allowClear={false}\n className=\"inputsmall\" size=\"small\" style={{ \"width\": \"100%\" }} format=\"MMM Do YYYY\" />\n </Form.Item>\n <div>\n <label><small>Metric:</small></label><div style={{ \"height\": \"0px\" }} className=\"shim\" />\n <Select value={unit} style={{ \"width\": \"140px\" }} onChange={(e) => setUnit(e)} size=\"small\">\n <Select.Option value={\"price\"} ><small>Dollars</small></Select.Option>\n <Select.Option value={\"units\"}><small>Units</small></Select.Option>\n <Select.Option value={\"txn\"}><small>Transactions</small></Select.Option>\n </Select>\n </div>\n </Space>\n </Form>\n )\n }\n\n return (\n <>\n\n <Layout className=\"layout\">\n <LayoutHeader\n title={<>Time of Day Sales {resetAllButton()}</>}\n description=\"Use this page to review the average, maximum, and minimum sales metrics by date, day and hour within a specified date range of up to one year.\"\n filters={<>\n {drawPicker()}\n <br />\n <TimeOfDayFilters groupBy={groupBy} callback={(e) => setGroupBy(e)} headers={results} />\n <div className=\"shim\" /><div className=\"shim\" />\n </>}\n />\n\n <div style={{ \"padding\": \"30px\", \"paddingBottom\": \"0px\" }} key={\"days\"}>\n {(!loading && <CalendarGrid loading={loading} unit={unit} heatmap={results[unit + \"_heatmap\"]} />)}\n <Divider dashed />\n </div>\n\n\n <div style={{ \"padding\": \"30px\" }} key={\"week\"}>\n <DayHistogram\n data={daysToData(results[unit + \"_days\"])}\n title=\"Weekdays\"\n />\n </div>\n\n {results[unit + \"_days\"].map((item, index) => {\n return (\n <div style={{ \"padding\": \"30px\" }} key={index}>\n\n <div style={{ \"margin\": \"20px -30px\" }}><Divider /></div>\n {drawPicker()}\n <Divider dashed />\n <DayHistogram\n data={item.rows.sort(sortByTimeThenValue).map(item => {\n\n let _i = { ...item }\n _i.time = convertToAMPM(_i.time)\n return _i;\n })}\n title={item.name}\n />\n </div>\n )\n })}\n </Layout>\n </>\n )\n}\n\n{/* <div class=\"g2-tooltip\" style=\"position: absolute; visibility: visible; z-index: 8; transition: left 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s, top 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s; background-color: rgb(255, 255, 255); box-shadow: rgb(174, 174, 174) 0px 0px 10px; border-radius: 3px; color: rgb(89, 89, 89); font-size: 12px; font-family: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; line-height: 12px; padding: 0px 12px; opacity: 0.95; pointer-events: none; left: 680.5px; top: 140.469px;\"><div class=\"g2-tooltip-title\" style=\"margin-bottom: 12px; margin-top: 12px;\">1pm</div><ul class=\"g2-tooltip-list\" style=\"margin: 0px; list-style-type: none; padding: 0px;\">\n <li class=\"g2-tooltip-list-item\" data-index=\"\" style=\"list-style-type: none; padding: 0px; margin: 12px 0px;\">\n <span class=\"g2-tooltip-marker\" style=\"background: rgb(100, 166, 218); width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 8px;\"></span>\n <span class=\"g2-tooltip-name\">Average</span>:\n <span class=\"g2-tooltip-value\" style=\"display: inline-block; float: right; margin-left: 30px;\">$2,103</span>\n</li></ul></div> */}","import { Affix, Alert } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { Redirect, Route, Switch, useLocation } from \"react-router-dom\";\nimport { useHistory } from \"react-router-dom\";\n\n// import Order from \"../components/Order\";\nimport ItemHistory2 from \"../components/ItemHistory2\";\nimport ListCreatePdf from \"../components/lists/ListCreatePdf\";\nimport ListPrint from \"../components/lists/ListPrint\";\nimport PreviousOrder from \"../components/PreviousOrder\";\nimport ProcessPDF from \"../components/ProcessPdf\";\nimport Pubstock from \"../components/Pubstock\";\nimport Slider from \"../components/Slider\";\nimport Title from \"../components/title/Title\";\nimport TitleDetails from \"../components/title/TitleDetails\";\nimport Blank from \"../layouts/Blank\";\nimport Default from \"../layouts/Default\";\nimport Left from \"../layouts/Left\";\nimport LoginLayout from \"../layouts/LoginLayout\";\nimport Standard from \"../layouts/Standard\";\nimport Test from \"../layouts/Test\";\nimport Test2 from \"../layouts/Test2\";\nimport URLShortcuts from \"../layouts/URLShortcuts\";\nimport AnalyticsTableHtml from \"../pages/analytics/AnalyticsTableHtml\";\nimport BrowsePage from \"../pages/BrowsePage\";\nimport BrowsePage2 from \"../pages/BrowsePage2\";\nimport BrowsePage3 from \"../pages/BrowsePage3\";\nimport BrowsePage4 from \"../pages/BrowsePage4\";\nimport BusinessDirectoryPage from \"../pages/BusinessDirectoryPage\";\nimport CartPage from \"../pages/CartPage\";\nimport CataloguesPage from \"../pages/CatalougesPage\";\nimport AppearancePage from \"../pages/content/AppearancePage\";\nimport BrandingPage from \"../pages/content/BrandingPage\";\nimport EventsPage from \"../pages/content/EventsPage\";\nimport MyReps from \"../pages/content/MyReps\";\nimport SiteContentPage from \"../pages/content/SiteContentPage\";\nimport SitePagesPage from \"../pages/content/SitePagesPage\";\nimport GiftcardActivityPage from \"../pages/GiftcardActivityPage\";\nimport ManageCustomers from \"../pages/ManageCustomers\";\nimport ManageGiftRegistriesPage from \"../pages/ManageGiftRegistriesPage\";\n// import MyListsPage from \"../pages/content/MyListsPages\";\nimport MyListsPage from \"../pages/MyListsPage\";\nimport PickListPage from \"../pages/PicklistPage\";\nimport PrintGiftRegistry from \"../pages/PrintGiftRegistry\";\nimport ReceiptLogoPage from \"../pages/ReceiptLogoPage\";\nimport RemoteSupportPage from \"../pages/RemoteSupportPage\";\nimport AnalyticsPage from \"../pages/reports/AnalyticsPage\";\nimport BackupPage from \"../pages/reports/BackupsPage\";\nimport CalandarReportsPage from \"../pages/reports/CalandarReportsPage\";\nimport EdiActivityPage from \"../pages/reports/EdiActivityPage\";\nimport LibraryInvestmentProjectPage from \"../pages/reports/LibraryInvestmentProjectPage\";\nimport ManageTitleComments from \"../pages/reports/ManageTitleCommentsPage\";\nimport PreviousOrdersPage from \"../pages/reports/PreviousOrdersPage\";\nimport SalesComparisonsPage from \"../pages/reports/SalesComparisonsPage\";\nimport SiteUsagePage from \"../pages/reports/SiteUsagePage\";\nimport UsCanPriceComparisonPage from \"../pages/reports/UsCanPriceComparisonPage\";\nimport WebstoreOrderingPage from \"../pages/reports/WebstoreOrderingPage\";\nimport GiftCardsPage from \"../pages/settings/GiftCardsPage\";\nimport PermissionsPage2 from \"../pages/settings/PermissionsPage2\";\nimport PermissionsPage3 from \"../pages/settings/PermissionsPage3\";\nimport PermissionsPage4 from \"../pages/settings/PermissionsPage4\";\nimport PromoCodesPage from \"../pages/settings/PromoCodesPage\";\nimport SalesPromotionsPage from \"../pages/settings/SalesPromotionsPage\";\nimport StoreStockSharing from \"../pages/settings/StoreStockSharing\";\nimport WebstoreSettingsPage from \"../pages/settings/WebstoreSettingsPage\";\nimport SiteUploadsPage from \"../pages/SiteUploadsPage\";\nimport StockCheckPage from \"../pages/StockCheckPage\";\nimport StockTitleUploadPage from \"../pages/StockTitleUploadPage\";\nimport SuggestedCartsPage from \"../pages/SuggestedCartsPage\";\nimport SwitchPage from \"../pages/SwitchPage\";\nimport TaxPreferencesPage from \"../pages/TaxPreferencesPage\";\nimport TestPage from \"../pages/TestPage\";\nimport TestPage2 from \"../pages/TestPage2\";\nimport ReloadStore from \"../ReloadStore\";\nimport Ani from \"../utils/Ani\";\nimport { apiCall } from \"./Api\";\nimport LiveToggle from \"./LiveToggle\";\nimport { useSession } from \"./Session\";\nimport Splitter from \"./Splitter\";\nimport { objectToPath } from \"./Utils\";\nimport CustomerSalesExport from \"../pages/reports/CustomerSalesExport\";\nimport ProcessReport from \"../components/ProcessReport\";\nimport TimeOfDaySales from \"../pages/reports/TimeOfDaySales\";\nimport EmailedGiftCards from \"../pages/reports/EmailedGiftCards\";\n\nfunction SiteRouter(props) {\n\n const {dark_mode = \"\"} = props; \n const [collapsed, setCollapsed] = useState(true);\n const [session, setSession] = useSession();\n const location = useLocation(); \n const history = useHistory();\n const [redirect, setRedirect] = useState(history.location.pathname);\n\n \n\n let _defaultpath = \"/purchasing/browse\";\n\n if (session.hasOwnProperty(\"filter_preset_defaults\")) {\n if (session.filter_preset_defaults.hasOwnProperty(\"status\")) {\n _defaultpath = \"/purchasing/browse\" + objectToPath(session.filter_preset_defaults.status.selections);\n }\n }\n\n\n\n // Log Errors\n\n const logError = (e, s, l, c, n) => {\n\n if (e === \"Script error.\") {\n return;\n }\n if (err.error_info == 'ResizeObserver loop limit exceeded') {\n return;\n }\n if (err.error_info == 'Uncaught session not open') {\n return;\n }\n let err = {};\n err.location = (location && location.pathname) ? location.pathname : \"no location\";\n err.user_agent = (navigator && navigator.userAgent) ? navigator.userAgent : \"no agent\";\n err.error_info = (e) ? e : \"no error info\";\n err.source = (s) ? s : \"no source\";\n err.lineno = (l) ? l : \"no lineno\";\n err.colno = (c) ? c : \"no colno\";\n err.error = (n) ? n : \"no error\";\n\n apiCall(\"log/error\", err, () => { });\n }\n\n const errorListener = () => {\n window.onerror = (e, s, l, c, n) => {\n logError(e, s, l, c, n);\n }\n }\n\n useEffect(errorListener, []);\n\n\n const drawRoutes = () => {\n\n if (!session.logged_in) {\n\n return (\n <Switch>\n {/* Available without login */}\n <Route path=\"/switch/:ses\" children={<Blank><SwitchPage /></Blank>} />\n <Route path=\"/stockcheck/:isbn/:session/:store_id\" children={<Blank><StockCheckPage /></Blank>} />\n {/* Send all others to login screen */}\n <Route exact path=\"/\">\n <LoginLayout setRedirect={setRedirect} dark={props.dark} redirect={redirect} />\n </Route>\n <Redirect from=\"*\" to=\"/\" />\n </Switch>\n )\n\n return <Route path=\"/\" children={<LoginLayout />} />\n }\n\n \n\n\n const drawDarkMode = () => {\n\n if(location.pathname.includes(\"/stockcheck/\")){\n return <></>\n } else {\n return dark_mode; \n }\n\n }\n\n \n\n \n\n \n\n\n return (\n <>\n \n <Switch>\n {/* Test */}\n\n <Route path=\"/table/\" children={<AnalyticsTableHtml />} />\n <Route path=\"/picklist/:action/:ee_def_id\" children={<Blank><PickListPage /></Blank>} />\n <Route path=\"/previous_order/:order_id\" children={<Blank><PreviousOrder /></Blank>} />\n <Route path=\"/registry/:registry_id\" children={<Blank><PrintGiftRegistry /></Blank>} />\n <Route path=\"/stockcheck/:isbn/:session/:store_id\" children={<Blank bg_color=\"#fff\"><StockCheckPage /></Blank>} />\n\n <Route path=\"/switch/:ses\" children={<Blank><SwitchPage /></Blank>} />\n <Route path=\"/item/:url_isbn\" children={<Blank><Title /></Blank>} />\n\n <Route path=\"/reload\" children={<Blank><ReloadStore /></Blank>} />\n <Route path=\"/pdf/:process_id\" children={<Blank><ProcessPDF /></Blank>} />\n <Route path=\"/report/:process_id\" children={<Blank><ProcessReport /></Blank>} />\n\n \n {/* <Route path=\"/test2\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><TestPage2 /></Default>} /> */}\n\n <Route path=\"/print/list/:list_id\" children={<Blank><ListPrint /></Blank>} />\n\n {/* <Route path=\"/test3\" children={<Left><BrowsePage /></Left>} />\n <Route path=\"/test2\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><BrowsePage3 /></Default>} />\n\n <Route path=\"/test\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><TestPage /></Default>} /> */}\n\n \n\n\n <Route path=\"/title\" children={<Left collapsed={collapsed} setCollapsed={setCollapsed}><Ani>\n <div style={{ \"padding\": \"30px\" }}>\n <TitleDetails isbn=\"ATEST00000000\" />\n {/* <TitleDetails isbn=\"9780062060624\" /> */}\n </div>\n\n </Ani></Left>} />\n\n {/* Settings */}\n <Route path=\"/settings/web-store-settings/:section\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><WebstoreSettingsPage /></Default>} />\n <Route path=\"/settings/web-store-settings/:section/:search\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><WebstoreSettingsPage /></Default>} />\n <Route path=\"/settings/web-store-settings\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><WebstoreSettingsPage /></Default>} />\n <Route path=\"/settings/permissions\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><PermissionsPage4 /></Default>} />\n {(window.sitesettings.is_bm && <Route path=\"/settings/gift-cards\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><GiftCardsPage /></Default>} />)}\n <Route path=\"/settings/store-stock-sharing\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><StoreStockSharing /></Default>} />\n <Route path=\"/settings/promo-codes\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><PromoCodesPage /></Default>} />\n <Route path=\"/settings/sales-promotions\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SalesPromotionsPage /></Default>} />\n <Route path=\"/settings/tax-preferences\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><TaxPreferencesPage /></Default>} />\n <Route path=\"/settings/receipt-logo\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><ReceiptLogoPage /></Default>} />\n\n {((session.permissions.interm_upload_access) && <Route path=\"/settings/stock-title-uploads\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><StockTitleUploadPage /></Default>} />)}\n\n {((session.permissions.titlelist_onhand) && <Route path=\"/settings/stock-managment\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><StockTitleUploadPage management={true} /></Default>} />)}\n\n {/* Content */}\n <Route path=\"/content/appearance\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><AppearancePage /></Default>} />\n <Route path=\"/content/branding\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><BrandingPage /></Default>} />\n <Route path=\"/content/events\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><EventsPage /></Default>} />\n <Route path=\"/content/site-content\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SiteContentPage /></Default>} />\n <Route path=\"/content/site-uploads\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SiteUploadsPage /></Default>} />\n <Route path=\"/content/site-pages\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SitePagesPage /></Default>} />\n {/* <Route path=\"/content/my-lists\" children={ <Default dark={props.dark} ><MyListsPage /></Default>} /> */}\n\n {/* Report */}\n <Route path=\"/reports/analytics\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><AnalyticsPage /></Default>} />\n {(window.sitesettings.is_bm && <Route path=\"/reports/time-of-day-sales\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><TimeOfDaySales /></Default>} />)}\n {(window.sitesettings.is_bm && <Route path=\"/reports/backups\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><BackupPage /></Default>} />)}\n <Route path=\"/reports/calandar-reports\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><CalandarReportsPage /></Default>} />\n {(window.sitesettings.is_bm && <Route path=\"/reports/edi-activity\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><EdiActivityPage /></Default>} />)}\n <Route path=\"/reports/library-investment-project\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><LibraryInvestmentProjectPage /></Default>} />\n <Route path=\"/reports/manage-title-comments\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><ManageTitleComments /></Default>} />\n <Route path=\"/reports/manage-gift-registries\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><ManageGiftRegistriesPage /></Default>} />\n <Route path=\"/reports/manage-customers\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><ManageCustomers /></Default>} />\n {/* <Route path=\"/reports/previous-orders/:search\" children={ <Default dark={props.dark} ><PreviousOrdersPage /></Default>} /> */}\n <Route path=\"/reports/previous-orders\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><PreviousOrdersPage /></Default>} />\n {(window.sitesettings.is_bm && <Route path=\"/reports/industry-sales-comparisons\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SalesComparisonsPage /></Default>} />)}\n <Route path=\"/reports/site-usage\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SiteUsagePage /></Default>} />\n <Route path=\"/reports/uscan-price-comparison\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><UsCanPriceComparisonPage /></Default>} />\n <Route path=\"/reports/webstore-ordering\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><WebstoreOrderingPage /></Default>} />\n {/* <Route path=\"/reports/emailed-gift-cards\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><EmailedGiftCards /></Default>} /> */}\n {(window.sitesettings.is_bm && <Route path=\"/reports/gift-card-activity\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><GiftcardActivityPage /></Default>} />)}\n {(window.sitesettings.is_bm && <Route path=\"/reports/customer-sales-export\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><CustomerSalesExport /></Default>} />)}\n \n\n {/* Purchasing */}\n <Route path=\"/purchasing/cart\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><CartPage /></Default>} />\n <Route path=\"/purchasing/browse\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><BrowsePage4 /></Default>} />\n <Route path=\"/purchasing/catalog\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><BrowsePage4 /></Default>} />\n <Route path=\"/purchasing/my-lists\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><MyListsPage /></Default>} />\n <Route path=\"/purchasing/catalogues\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><CataloguesPage collapsed={collapsed} /></Default>} />\n <Route path=\"/purchasing/business-directory\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><BusinessDirectoryPage collapsed={collapsed} /></Default>} />\n <Route path=\"/purchasing/my-reps\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><MyReps /></Default>} />\n <Route path=\"/purchasing/suggested-carts\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><SuggestedCartsPage /></Default>} />\n\n {/* Tools */}\n\n {/* Support */}\n\n <Route path=\"/support/remote-support\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><RemoteSupportPage /></Default>} />\n\n <Route path=\"/test\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><Test /></Default>} />\n <Route path=\"/url-shortcuts\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><URLShortcuts /></Default>} />\n <Route path=\"/webstore\" children={<Default drawDarkMode={drawDarkMode} dark={props.dark} ><WebstoreSettingsPage /></Default>} />\n {/* <Route path=\"/\" children={<LoginLayout />} /> */}\n <Redirect from=\"/\" to={_defaultpath} />\n <Redirect from=\"\" to={_defaultpath} />\n <Route path=\"*\" children={<Standard />} />\n </Switch>\n <LiveToggle />\n </>\n )\n }\n\n return drawRoutes();\n\n}\n\nexport default SiteRouter;\n","import { useEffect, useState } from 'react';\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport SiteRouter from './utils/SiteRouter';\nimport Cookies from 'js-cookie';\nimport './antd.css';\nimport './chrome.scrollbar.css';\nimport './App.css';\nimport './Dark.css';\nimport \"medium-editor/dist/css/medium-editor.css\";\nimport \"./medium.css\";\nimport Session from './utils/Session';\nimport { apiCall } from './utils/Api';\nimport { Spin, Tooltip } from 'antd';\n\nimport { BulbOutlined, BulbFilled } from '@ant-design/icons';\nimport Prefs from './utils/Prefs';\n\n/*\n- Entry point into store site. \n- Fetches and sets settings & session data.\n- Saves a session id into a cookie (session_store_id)\n- Draws session context & routes\n*/\n\nfunction App() {\n\n const [loading, setLoading] = useState(true);\n const [session, setSession] = useState({});\n\n\n const swapFavicon = (_webstore_name) => {\n\n const head = document.querySelector('head');\n const existingFavicon = document.querySelector('link[rel=\"shortcut icon\"]');\n const newFavicon = document.createElement('link');\n \n newFavicon.rel = 'shortcut icon';\n newFavicon.href = \"https://cdn1.bookmanager.com/i/\"+_webstore_name+\"/favicon.png\";\n \n if (existingFavicon) {\n head.removeChild(existingFavicon);\n }\n \n head.appendChild(newFavicon);\n }\n\n\n const [prefs, setPrefs] = useState({\n store: \"\",\n pendingOO: false,\n bm_data: false,\n last_used : \"\",\n selected : Cookies.get(\"selected\") || \"comments\"\n });\n\n window.beta = false;\n\n const getSettings = () => {\n apiCall(\"store/getSettings\", {}, (_status, _result) => {\n if (_status) {\n window.sitesettings = _result;\n setLoading(false);\n }\n })\n }\n\n const getSession = () => {\n apiCall(\"session/get\", {}, (_status, _result) => {\n if (_status) {\n Cookies.set(\"session_store_id\", _result.session_id, { expires: 365 });\n if (_result.logged_in) {\n window.store_id = _result.store_id;\n setSession(_result);\n swapFavicon(_result.webstore_name); \n getSettings();\n } else {\n setSession(_result);\n setLoading(false);\n }\n }\n })\n }\n\n useEffect(() => {\n getSession();\n setShareCookie();\n window.addEventListener('focus', onFocus);\n return () => {\n window.removeEventListener('focus', onFocus);\n }\n }, []);\n\n const onFocus = (e) => {\n setShareCookie();\n }\n\n const setShareCookie = () => {\n // set this cookie so share.bookmanager.com can read and any other subdomains can overwrite\n Cookies.set(\"last_domain\", \"biz\", { expires: 365, domain: \".bookmanager.com\" });\n }\n\n \n \n\n\n \n\n\n\n let _init_dark = ((Cookies.get(\"darkmode\") === \"true\") ? true : false);\n const [dark, setDark] = useState(_init_dark);\n document.body.classList.toggle('dark', dark);\n\n const toggleDark = () => {\n document.body.classList.toggle('dark', !dark);\n Cookies.set(\"darkmode\", !dark, { expires: 365 });\n setDark(!dark);\n }\n\n\n if (loading) {\n return (\n <Spin spinning={loading}>\n <div style={{ \"width\": \"1310px\", \"margin\": \"0 auto\", \"height\": \"800px\" }}></div>\n </Spin>\n );\n }\n\n\n\n return (\n <Prefs value={[prefs, setPrefs]}>\n <Session value={[session, setSession]}>\n <Router>\n <SiteRouter dark_mode={<Tooltip title={\"Toggle dark/light display mode\"}><div className=\"no-print\" onClick={() => toggleDark(!dark)} style={{ \"position\": \"fixed\", \"bottom\": \"25px\", \"left\": \"25px\", \"cursor\": \"pointer\" }}>{(dark) ? <small><BulbFilled style={{ \"color\": \"#666\" }} /></small> : <small><BulbOutlined style={{ \"color\": \"#666\" }} /></small>}</div></Tooltip>} dark={dark} basename=\"/\" />\n </Router>\n </Session>\n <div id=\"printArea\" />\n </Prefs>\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n <App />,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import React from \"react\"\nimport { Button, Divider, Dropdown, Menu, Space, Tag, Typography } from \"antd\";\nimport Cookies from \"js-cookie\";\nimport moment from \"moment\";\nexport const successColor = \"#4f9818\"; // green\nexport const warningColor = \"#E77E21\"; // orage\nexport const disabledColor = \"#999999\"; // grey\nexport const futureColor = \"#189285\"; // teal\nexport const bestsellerColor = \"#F12A46\"; // red\nexport const peerColor = \"#A52A2A\"; // burgandy\nexport const favColor = \"#ffcf17\" // yellow\nexport const highlightColor = \"#49b7e0\" // lightBlue\nexport const returnedColor = \"#9932cc\" // lightBlue\n\n\nexport const drawDeliveryTime = (min, max) => {\n if (!max) {\n return min;\n }\n\n if (min === max) {\n return min;\n }\n\n return (min + \"-\" + max);\n\n}\n\n\nexport const filterUnique = (array, property) => {\n\n const seen = {};\n return array.reduce((uniqueArray, currentItem) => {\n const value = currentItem[property];\n if (!seen.hasOwnProperty(value)) {\n seen[value] = true;\n uniqueArray.push(currentItem);\n }\n return uniqueArray;\n }, []);\n}\n\n\nexport const drawMSTitleBar = (_stores = [], _title, _index, _divider = true) => {\n\n\n if (_stores.length <= 1) {\n return (<></>);\n }\n\n const menu = (\n <Menu>\n {_stores.map((item, ind) => {\n return (\n <Menu.Item onClick={(e) => {\n setTimeout(() => {\n let element = document.getElementById(\"store\" + ind);\n if (element) {\n let m = element.getBoundingClientRect();\n window.scrollTo({\n top: m.y - 100 + window.scrollY,\n left: 0,\n behavior: 'smooth'\n });\n }\n }, 10)\n }}>{item.name}</Menu.Item>\n )\n })}\n </Menu>\n );\n\n return (\n <div>\n <div id={\"store\" + _index} />\n <div className=\"float-flex\">\n <Typography.Title level={5}>{_title}</Typography.Title>\n <Dropdown overlay={menu}>\n <a onClick={(e) => e.preventDefault()}>\n <small>Jump to Store</small>\n </a>\n </Dropdown>\n </div>\n {(_divider && <div style={{ \"margin\": \"0 -23px\" }}><Divider style={{ \"margin\": \"15px 0px\" }} /></div>)}\n </div >\n )\n}\n\nexport const drawMSFooter = (_stores = [], _index) => {\n\n if (_index === (_stores.length - 1)) {\n return (<></>);\n }\n\n return (<div style={{ \"margin\": \"0px -23px\" }}><Divider style={{ \"margin\": \"15px 0px\" }} /></div>)\n\n}\n\nexport const handleTermSlash = (_str, _encode = false) => {\n\n if (_encode) {\n return _str.replace(\"/\", \"%2f\");\n } else {\n return _str.replace(\"%2f\", \"/\");\n }\n\n}\n\n\nexport const findMedian = (_arr = []) => {\n // sort\n _arr.sort(function (a, b) {\n return a - b;\n });\n\n if (_arr.length % 2 !== 0) {\n return _arr[Math.floor(_arr.length / 2)];\n }\n else {\n let mid = _arr.length / 2;\n return (_arr[mid - 1] + _arr[mid]) / 2;\n }\n\n}\n\n\nexport const getEANChecksum = (ean) => {\n const sum = (10 - (((Number(ean[0]) + Number(ean[2]) + Number(ean[4]) + Number(ean[6]) + Number(ean[8]) + Number(ean[10])) + ((Number(ean[1]) + Number(ean[3]) + Number(ean[5]) + Number(ean[7]) + Number(ean[9]) + Number(ean[11])) * 3)) % 10) % 10);\n return sum;\n}\n\nexport const isValidEAN = (ean) => {\n if (!/^[0-9]{13}$/.test(ean)) {\n return false;\n }\n if (Number(ean[12]) !== getEANChecksum(ean)) {\n return false; // check digit doesn't match, bad ean.\n }\n return true;\n}\n\nexport const containsISBN = (ean) => {\n if (!/^978[0-9]{10}$/.test(ean)) {\n return false;\n }\n return isValidEAN(ean);\n}\n\n\n\n\n// export const containsISBN = (_str) => {\n// // Regular expression to match ISBNs\n// const isbnRegex = /^(?=(?:\\D*\\d){10}(?:(?:\\D*\\d){3})?$)[\\d-]+$/i;\n// // Search the string for a match and return the result\n// return isbnRegex.test(_str);\n// }\n\n\nexport const isValidUPC = (_str) => {\n // check if the str is 12 digit number\n let pattern = /^\\d{12}$/;\n if (!pattern.test(_str)) {\n return false;\n }\n\n // calculate the check digit\n let sum = 0;\n for (let i = 0; i < 11; i++) {\n sum += (i % 2 === 0 ? 3 : 1) * _str[i];\n }\n\n let checkDigit = 10 - (sum % 10);\n\n // ensure check digit matches the last digit\n if (checkDigit === parseInt(_str[11])) {\n return true;\n } else {\n return false;\n }\n\n}\n\n\nexport const sortAlpha = (_arr, _key) => {\n return _arr.sort((a, b) => {\n let _a = a[_key].toLowerCase();\n let _b = b[_key].toLowerCase();\n if (_a < _b) {\n return -1; // nameA comes before nameB\n }\n if (_a > _b) {\n return 1; // nameA comes after nameB\n }\n return 0; // names are equal\n });\n}\n\n\nexport const serialize = (obj) => {\n if (Array.isArray(obj)) {\n return JSON.stringify(obj.map(i => serialize(i)))\n } else if (typeof obj === 'object' && obj !== null) {\n return Object.keys(obj)\n .sort()\n .map(k => `${k}:${serialize(obj[k])}`)\n .join('|')\n }\n return obj\n}\n\nexport const flattenObject = (ob) => {\n var toReturn = {};\n\n for (var i in ob) {\n if (!ob.hasOwnProperty(i)) continue;\n\n if ((typeof ob[i]) == 'object') {\n var flatObject = flattenObject(ob[i]);\n for (var x in flatObject) {\n if (!flatObject.hasOwnProperty(x)) continue;\n\n toReturn[i + '.' + x] = flatObject[x];\n }\n } else {\n toReturn[i] = ob[i];\n }\n }\n return toReturn;\n};\n\n\nexport const serializeJSON = (obj) => {\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === 'object' && value !== null) {\n return serializeJSON(value);\n }\n return value;\n }, 2);\n}\n\n\n\nexport const getISBNCount = (_str) => {\n // Regular expression to match ISBNs\n const isbnRegex = /(?:ISBN(?:: ?| ))?((?:97[89])?\\d{9}[\\dx])/gi;\n // Use the regular expression to search the string and get all matches\n const matches = _str.match(isbnRegex);\n // If there are no matches, return 0\n if (!matches) {\n return 0;\n }\n // Return the length of the matches array\n return matches.length;\n}\n\n\nexport const sum = (_arr, _key) => {\n return _arr.reduce((a, b) => a + (b[_key] || 0), 0);\n}\n\nexport const convertLineBreaks = (_str) => {\n const regex = /\\\\n|\\\\r\\\\n|\\\\n\\\\r|\\\\r/g;\n return _str.replace(regex, '<br />');\n}\n\n\nexport const getPercentageIncrease = (numA, numB, persision = 2) => {\n if (numA === 0 || numB === 0) {\n return \"N/A\";\n }\n return (((numA - numB) / numB) * 100).toFixed(persision);\n}\n\n\nexport const clamp = (num, min, max) => Math.min(Math.max(num, min), max);\n\nexport const getSan = (_corp_id, _stores = []) => {\n\n let _f = _stores.find(item => item.cid === _corp_id);\n if (_f) {\n return _f.san;\n } else {\n return \"\";\n }\n\n}\n\nexport const bmDate = (_date) => {\n return moment(_date).format(\"MMM DD-YY\")\n\n // if (moment(_date).format(\"D\").length === 1) {\n // return moment(_date).format(\"MMM DD-YY\")\n // } else {\n // return moment(_date).format(\"MMM DD-YY\")\n // }\n}\n\nexport const getFlag = (_country) => {\n let flag = \"https://cdn1.bookmanager.com/i/CA.png\"\n switch (_country) {\n case \"Canada\":\n flag = \"CA\"\n break;\n case \"United Kingdom\":\n flag = \"CA\"\n break;\n case \"USA\":\n flag = \"US\"\n break;\n default:\n flag = \"CA\"\n break;\n }\n return \"https://cdn1.bookmanager.com/i/\" + flag + \".png\";\n}\n\nexport const cacheBuster = (_first = false) => {\n let cb = Math.round(new Date().getTime() / 1000);\n if (_first) {\n return \"?cache=\" + cb.toString();\n }\n\n return \"&cache=\" + cb.toString();\n}\n\nexport const getCanIcon = () => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"-2015 -2000 4030 4030\"><title>maple leaf from the flag of Canada\n )\n}\n\nexport const bytesToSize = (bytes) => {\n let sizes = ['', 'k', 'm', 'gb', 'tb'];\n if (bytes == 0) return '0 Byte';\n let i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\n return Math.round(bytes / Math.pow(1024, i), 2) + '' + sizes[i];\n}\n\nexport const addCommas = (_num) => {\n return _num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\n// React likes unique id's for listed elements so it knows what to draw / update\nexport const addKeys = (_arr, _key = false) => {\n return (_arr.map((item) => {\n\n if (_key) {\n item[\"key\"] = item[_key];\n } else {\n item[\"key\"] = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n }\n\n return item;\n }))\n}\n\nexport const makeKey = () => {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);;\n}\n\nexport const ucfirst = (string) => {\n\n if (string.includes(\"-\")) {\n string = string.split(\"-\");\n string = string.map(item => ucfirst(item));\n return string.join(\" \");\n }\n\n\n if (string.includes(\"_\")) {\n string = string.split(\"_\");\n string = string.map(item => ucfirst(item));\n return string.join(\" \");\n }\n\n return (string) ? string.charAt(0).toUpperCase() + string.slice(1) : \"\";\n}\n\n\nexport const parseAuthors = (_authors, _color = \"#007EF5\", _fontsize = \"14px\") => {\n\n if (!_authors || _authors.length === 0) { return \"\" }\n return _authors.map((_author, index) => {\n let flag = (_author.canadian && window.sitesettings.is_canadian);\n return ({_author.name} {(flag && getCanIcon())}{(index !== _authors.length - 1) ? \", \" : \"\"} );\n });\n}\n\nexport const parseAuthorsPlain = (_authors) => {\n if (!_authors || _authors.length === 0) { return \"\" }\n return _authors.map((_author, index) => {\n return ({_author.name}{(index !== _authors.length - 1) ? \", \" : \"\"} );\n });\n}\n\n\nexport const parseSubjectsPlain = (_subjects) => {\n if (!_subjects || _subjects.length === 0) { return \"\" }\n return _subjects.map((_subject, index) => {\n if (_subject.sub_labels.length > 0) {\n return ({_subject.subject} / {_subject.sub_labels.map((_sub) => { return (_sub.label) }).join(\" / \")}{(index !== _subject.sub_labels.length && \" \")} )\n } else {\n return ({_subject.subject});\n }\n })\n}\n\n\nexport const parseSubjectsWeird = (_subjects, _limit = 30) => {\n if (!_subjects || _subjects.length === 0) { return \"\" }\n let ret = \"\";\n // limit to first\n _subjects = [_subjects[0]];\n return _subjects.map((_subject, index) => {\n if (_subject.sub_labels.length > 0) {\n // limit to first sub\n if (_subject.sub_labels.length > 0) {\n ret += _subject.sub_labels[0].bisac.substr(0, 3) + \": \" + _subject.sub_labels[0].label;\n }\n return <>{ret}\n } else {\n return (<>{_subject.subject.substring(0, _limit)});\n }\n })\n}\n\n\n\n\nexport const parseSubjects = (_subjects) => {\n\n if (!_subjects || _subjects.length === 0) { return \"\" }\n return _subjects.map((_subject, index) => {\n let ss = _subject.sub_labels.filter(item => item.label !== \"\");\n if (ss.length > 0) {\n return (
{_subject.subject} / {ss.map((_sub) => { return (_sub.label) }).join(\" / \")}\n {((index + 1) !== _subjects.length && \" \")}\n
)\n } else {\n return (
{_subject.subject}
);\n }\n })\n}\n\nexport const parseSubjectsList = (_subjects) => {\n if (!_subjects || _subjects.length === 0) { return \"\" }\n return _subjects.map((_subject, index) => {\n if (_subject.sub_labels.length > 0) {\n // has sub\n return ({_subject.subject}
{_subject.sub_labels.map((_sub, i) => { return ((_sub.label) ? {_sub.label}
: <>) })}
)\n } else {\n return ({_subject.subject}
);\n }\n })\n}\n\nexport const parseSubjectsBisacs = (_subjects) => {\n\n if (!_subjects || _subjects.length === 0) { return \"\" }\n return _subjects.map((_subject, index) => {\n if (_subject.sub_labels.length > 0) {\n // has sub\n return ({_subject.subject}
{_subject.sub_labels.map((_sub, i) => { return ((_sub.label) ? {_sub.label} {_sub.bisac}
: <>) })}
)\n } else {\n return ({_subject.subject}
);\n }\n })\n}\n\n\n\n\n\n\nexport const parseRank = (_rank) => {\n if (!_rank) { return \"\" }\n if (_rank.hasOwnProperty('bestseller')) {\n return ({\"#\" + _rank.bestseller + \" in bestsellers\"});\n }\n if (_rank.hasOwnProperty('future')) {\n return ({\"#\" + _rank.future + \" in future releases\"});\n }\n return \"\";\n}\n\n\nexport const getQuantity = (_isbn, _cart) => {\n\n\n let find = _cart.find((item => item.isbn == _isbn));\n\n if (!find) {\n return [];\n }\n\n\n return find.suppliers.map((itm => {\n return {\n quantity: itm.quantity,\n supplier: itm.location\n }\n }))\n}\n\n\nexport const sumByKey = (arr, uniqueKey, sumKey) => {\n const result = [];\n arr.forEach((item) => {\n const uniqueValue = item[uniqueKey];\n const sumValue = item[sumKey];\n // Check if unique key already exists in result array\n const existingItem = result.find((r) => r[uniqueKey] === uniqueValue);\n if (existingItem) {\n // If unique key exists, add sum value to existing item\n existingItem[sumKey] += sumValue;\n } else {\n // If unique key doesn't exist, add new item to result array\n const newItem = {};\n newItem[uniqueKey] = uniqueValue;\n newItem[sumKey] = sumValue;\n result.push(newItem);\n }\n });\n\n return result;\n}\n\nexport const drawQuantity = (_isbn, _cart) => {\n let btn_arr = getQuantity(_isbn, _cart)\n let _color = (btn_arr.length > 0) ? \"#3C8617\" : \"#333333\"\n return (\n \n {((btn_arr.length === 0) && \"Order\")}\n {btn_arr.map((itm, index) => {\n return {itm.quantity} - {itm.supplier}
\n })}\n
\n )\n}\n\n\nexport const removeNulls = (obj) => {\n let newObj = {};\n for (const key in obj) {\n if (obj[key] !== null) {\n newObj[key] = obj[key];\n }\n }\n return newObj;\n}\n\n\n// Order array by groups, each group ordered alphabetically on separate key\nexport const groupSort = (_arr, _group_key, _group_order, _alpha_key) => {\n let _group_map = {};\n for (let i = 0; i < _group_order.length; i++) {\n _group_map[_group_order[i]] = i;\n }\n // Sort the objects by group and then by the alpha key within each group\n _arr.sort((a, b) => {\n if (_group_map[a[_group_key]] < _group_map[b[_group_key]]) {\n return -1;\n } else if (_group_map[a[_group_key]] > _group_map[b[_group_key]]) {\n return 1;\n } else {\n return a[_alpha_key].localeCompare(b[_alpha_key]);\n }\n });\n // Return the sorted array\n return _arr;\n}\n\n\nfunction sortObjectsByGroup(objects, groupOrder) {\n // Create an object to hold the group order\n let groupOrderMap = {};\n for (let i = 0; i < groupOrder.length; i++) {\n groupOrderMap[groupOrder[i]] = i;\n }\n\n // Sort the objects by group and then by title within each group\n objects.sort((a, b) => {\n if (groupOrderMap[a.group] < groupOrderMap[b.group]) {\n return -1;\n } else if (groupOrderMap[a.group] > groupOrderMap[b.group]) {\n return 1;\n } else {\n return a.title.localeCompare(b.title);\n }\n });\n\n // Return the sorted array of objects\n return objects;\n}\n\n\nexport const isNumeric = (str) => {\n if (typeof str != \"string\") return false // we only process strings! \n return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail\n}\n\n\nexport const toUriHash = (str) => {\n // Encode the string to Base64\n let base64 = Buffer.from(decodeURI(str)).toString('base64');\n // Replace characters that are not URI-friendly\n let uriEncoded = base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n\n return uriEncoded;\n}\n\n\nexport const fromUriHash = (hash) => {\n // Replace URI-friendly characters back to their original form\n let base64 = hash.replace(/\\-/g, '+').replace(/\\_/g, '/');\n // Add padding if needed\n while (base64.length % 4) {\n base64 += '=';\n }\n // Decode the Base64 string\n let str = Buffer.from(base64, 'base64').toString();\n return str;\n}\n\n\n\nexport function downloadImage(url, fileName) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"blob\";\n xhr.onload = function () {\n var urlCreator = window.URL || window.webkitURL;\n var imageUrl = urlCreator.createObjectURL(this.response);\n var tag = document.createElement('a');\n tag.href = imageUrl;\n tag.download = fileName;\n document.body.appendChild(tag);\n tag.click();\n document.body.removeChild(tag);\n }\n xhr.send();\n}\n\n\n\n\nexport const getGroups = (_stores = true) => {\n const blank = [\" \"]\n const stores = window.sitesettings.stores.map((item, index) => { return item.store_number.toString() })\n const groups = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"];\n\n if (stores.length > 1) {\n return stores.concat(blank.concat(groups));\n } else {\n return blank.concat(groups);\n }\n\n}\n\n\nexport const pathToObj = (_path, _map) => {\n let _arr = _path.split(\"/\");\n let _keys = Object.keys(_map).map(item => _map[item]);\n let _obj = {};\n\n _keys.forEach(_key => {\n _obj[_key] = \"\";\n })\n\n for (let i = 0; i < _arr.length; i++) {\n if (i < (_arr.length - 1)) {\n if (_obj.hasOwnProperty(_arr[i])) {\n _obj[_arr[i]] = _arr[(i + 1)];\n }\n }\n }\n\n let _ret = {}\n Object.keys(_map).forEach(_key => {\n if (_obj.hasOwnProperty(_map[_key])) {\n _ret[_key] = _obj[_map[_key]];\n }\n })\n\n return _ret;\n\n\n\n\n}\n\nexport const objToPath = (_obj, _map) => {\n let _path = \"filter\";\n Object.keys(_obj).forEach(_key => {\n if (_obj[_key]) {\n _path += \"/\" + _map[_key] + \"/\" + _obj[_key];\n }\n })\n return _path;\n}\n\n\n\n\n\n\nexport const objectToPath = (_obj, firstpage = false) => {\n let location = \"/filter\";\n\n // remove sub-subjects if there is no top-level subject\n if (_obj.hasOwnProperty(\"c\") && _obj.c.length === 0) {\n if (_obj.hasOwnProperty(\"d\") && _obj.d.length > 0) {\n delete _obj.d;\n }\n }\n\n if (_obj.hasOwnProperty(\"c\") && _obj.hasOwnProperty(\"d\")) {\n for (let i = 0; i < _obj.d.length; i++) {\n if (!_obj.c.includes(_obj.d[i].substr(0, 3))) {\n _obj.d = _obj.d.filter(itm => itm !== _obj.d[i]);\n }\n }\n }\n\n if (firstpage) {\n _obj.o = 0;\n }\n\n //(June 27, 2023) George - \n //Created a loop with a couple checks to make the code more futureproof for new filters\n //Also differentiates between arrays and non-arrays for the different _obj values, to handle correctly\n\n Object.keys(_obj).forEach((key) => {\n //runs if value is an array to properly append all values to url\n if (Array.isArray(_obj[key]) && _obj[key].length > 0) {\n if (_obj[key].includes(\"AND\") && _obj[key].length < 3) {\n // strip and\n _obj[key] = _obj[key].filter(itm => itm !== \"AND\");\n }\n location += \"/\" + key.toString() + \"/\" + _obj[key].join(\"/\")\n //runs for non-array values, like limit and offset\n } else if (_obj.hasOwnProperty(key) && _obj[key]) {\n //checks to see if the value at key is a string for encoding purposes\n if (typeof _obj[key] !== \"string\") {\n //run when value is not a string, so it can be turned into one for the sake of the url\n //examples are limit or offset, which are numbers\n //specific if to make sure firstpage values aren't being added to the url\n if ((key === 'l' && _obj[key] !== 20) || (key === 'o' && _obj[key] !== 0)) {\n location += \"/\" + key.toString() + \"/\" + _obj[key].toString();\n }\n } else {\n //runs when it is a string, so it can be properly encoded\n //example would be filter x\n location += \"/\" + key.toString() + \"/\" + encodeURI(_obj[key]);\n }\n }\n })\n\n return location;\n}\n\n\n\n\n\nexport const getFilterSet = (_key) => {\n let _saved = Cookies.get(\"filtersets\");\n if (!_saved) return false;\n _saved = JSON.parse(_saved);\n if (_saved.hasOwnProperty(_key)) {\n return JSON.parse(_saved[_key]);\n } else {\n return false;\n }\n}\n\nexport const saveFilterSet = (_key, _value) => {\n\n let _saved = Cookies.get(\"filtersets\");\n let filtersets = {}\n // no memory at all - save first\n if (!_saved) {\n filtersets = {\n [_key]: JSON.stringify(_value)\n }\n Cookies.set(\"filtersets\", JSON.stringify(filtersets))\n return filtersets[_key];\n }\n\n _saved = JSON.parse(_saved);\n // memory exists, no key \n _saved[_key] = JSON.stringify(_value);\n Cookies.set(\"filtersets\", JSON.stringify(_saved))\n return _saved[_key];\n}\n\n\nexport const getMemory = (_key) => {\n let _saved = Cookies.get(\"memory\");\n if (!_saved) return [];\n _saved = JSON.parse(_saved);\n if (_saved.hasOwnProperty(_key)) {\n return _saved[_key];\n } else {\n return []\n }\n}\n\nexport const saveMemory = (_key, _value) => {\n let _saved = Cookies.get(\"memory\");\n let memory = {}\n // no memory at all - save first\n if (!_saved) {\n memory = {\n [_key]: [_value]\n }\n Cookies.set(\"memory\", JSON.stringify(memory))\n return memory[_key];\n }\n\n _saved = JSON.parse(_saved);\n // memory exists, no key \n if (!_saved.hasOwnProperty(_key)) {\n _saved[_key] = [_value]\n Cookies.set(\"memory\", JSON.stringify(_saved))\n return _saved[_key];\n }\n\n if (_saved[_key].includes(_value)) {\n // not unique, put it at the top\n _saved[_key] = _saved[_key].filter(item => item !== _value);\n _saved[_key].unshift(_value);\n Cookies.set(\"memory\", JSON.stringify(_saved));\n return _saved[_key];\n }\n\n _saved[_key].unshift(_value);\n _saved[_key] = _saved[_key].slice(0, 6); // limit to 5\n Cookies.set(\"memory\", JSON.stringify(_saved));\n return _saved[_key];\n\n}\n\n\nexport const getFilterCount = (_path) => {\n\n let obj = pathToObject(_path);\n let count = 0;\n\n Object.keys(obj).forEach(key => {\n if (Array.isArray(obj[key])) {\n count += obj[key].length;\n }\n })\n\n return count;\n\n}\n\nfunction isLetter(c) {\n return c.toLowerCase() != c.toUpperCase();\n}\n\nexport const pathToObject = (_path, _save = \"\") => {\n\n\n let returnObject = {\n o: 0, // offset\n l: 20, // limit\n t: \"\", // term\n k: \"\", // type\n v: \"\", // order\n p: \"\", // preset\n z: \"\" // series\n }\n\n if (_save) {\n let _lm = parseInt(Cookies.get(_save));\n if (!isNaN(_lm)) {\n returnObject.l = _lm;\n }\n }\n\n let startIndex = _path.search(/filter/i);\n let p = _path.substr(startIndex, _path.length);\n let split = p.split(\"/\");\n let key;\n let ka = [\"b\"];\n for (let i = 0; i < split.length; i++) {\n if (split[i].length === 1 && isLetter(split[i])) {\n key = split[i];\n } else {\n if (!returnObject.hasOwnProperty(key)) {\n if (key) {\n returnObject[key] = [];\n } else {\n continue;\n }\n }\n if (Array.isArray(returnObject[key])) {\n\n returnObject[key] = [...returnObject[key], split[i]];\n } else {\n if (key === \"o\" || key === \"l\") {\n\n returnObject[key] = parseInt(split[i]);\n } else {\n returnObject[key] = split[i];\n }\n }\n (ka.indexOf(key) === -1 && ka.push(key));\n }\n }\n\n return returnObject;\n}\n\n\nexport const pluralize = (count, noun, suffix = 's') => {\n return (count === 1) ? noun : noun + suffix;\n}\n\n\nexport const adjustOpacity = (hexCode, amount) => {\n let hex = hexCode.replace('#', '');\n\n if (hex.length === 3) {\n hex = `${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`;\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n return `rgba(${r},${g},${b},${amount / 100})`;\n};\n\nexport const adjustColor = (col, amt) => {\n\n var usePound = false;\n\n if (col[0] === \"#\") {\n col = col.slice(1);\n usePound = true;\n }\n\n var num = parseInt(col, 16);\n\n var r = (num >> 16) + amt;\n\n if (r > 255) r = 255;\n else if (r < 0) r = 0;\n\n var b = ((num >> 8) & 0x00FF) + amt;\n\n if (b > 255) b = 255;\n else if (b < 0) b = 0;\n\n var g = (num & 0x0000FF) + amt;\n\n if (g > 255) g = 255;\n else if (g < 0) g = 0;\n\n return (usePound ? \"#\" : \"\") + (g | (b << 8) | (r << 16)).toString(16);\n\n}"],"sourceRoot":""}