diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx
index 04f0e3a6b..b561ead3f 100644
--- a/client/homebrew/pages/sharePage/sharePage.jsx
+++ b/client/homebrew/pages/sharePage/sharePage.jsx
@@ -1,6 +1,6 @@
require('./sharePage.less');
const React = require('react');
-const createClass = require('create-react-class');
+const { useState, useEffect, useCallback } = React;
const { Meta } = require('vitreum/headtags');
const Nav = require('naturalcrit/nav/nav.jsx');
@@ -8,130 +8,124 @@ const Navbar = require('../../navbar/navbar.jsx');
const MetadataNav = require('../../navbar/metadata.navitem.jsx');
const PrintNavItem = require('../../navbar/print.navitem.jsx');
const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
-const VaultNavItem = require('../../navbar/vault.navitem.jsx');
const Account = require('../../navbar/account.navitem.jsx');
const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js');
const { printCurrentBrew, fetchThemeBundle } = require('../../../../shared/helpers.js');
-const SharePage = createClass({
- displayName : 'SharePage',
- getDefaultProps : function() {
- return {
- brew : DEFAULT_BREW_LOAD,
- disableMeta : false
- };
- },
+const SharePage = (props)=>{
+ const { brew = DEFAULT_BREW_LOAD, disableMeta = false } = props;
- getInitialState : function() {
- return {
- themeBundle : {},
- currentBrewRendererPageNum : 1
- };
- },
+ const [state, setState] = useState({
+ themeBundle : {},
+ currentBrewRendererPageNum : 1,
+ });
- componentDidMount : function() {
- document.addEventListener('keydown', this.handleControlKeys);
+ const handleBrewRendererPageChange = useCallback((pageNumber)=>{
+ updateState({ currentBrewRendererPageNum: pageNumber });
+ }, []);
- fetchThemeBundle(this, this.props.brew.renderer, this.props.brew.theme);
- },
-
- componentWillUnmount : function() {
- document.removeEventListener('keydown', this.handleControlKeys);
- },
-
- handleBrewRendererPageChange : function(pageNumber){
- this.setState({ currentBrewRendererPageNum: pageNumber });
- },
-
- handleControlKeys : function(e){
+ const handleControlKeys = useCallback((e)=>{
if(!(e.ctrlKey || e.metaKey)) return;
const P_KEY = 80;
- if(e.keyCode == P_KEY){
- if(e.keyCode == P_KEY) printCurrentBrew();
+ if(e.keyCode === P_KEY) {
+ printCurrentBrew();
e.stopPropagation();
e.preventDefault();
}
- },
+ }, []);
- processShareId : function() {
- return this.props.brew.googleId && !this.props.brew.stubbed ?
- this.props.brew.googleId + this.props.brew.shareId :
- this.props.brew.shareId;
- },
+ useEffect(()=>{
+ document.addEventListener('keydown', handleControlKeys);
+ fetchThemeBundle(
+ {
+ setState,
+ },
+ brew.renderer,
+ brew.theme
+ );
- renderEditLink : function(){
- if(!this.props.brew.editId) return;
+ return ()=>{
+ document.removeEventListener('keydown', handleControlKeys);
+ };
+ }, [brew.renderer, brew.theme, handleControlKeys]);
- let editLink = this.props.brew.editId;
- if(this.props.brew.googleId && !this.props.brew.stubbed) {
- editLink = this.props.brew.googleId + editLink;
+ const processShareId = useCallback(()=>{
+ return brew.googleId && !brew.stubbed ? brew.googleId + brew.shareId : brew.shareId;
+ }, [brew]);
+
+ const renderEditLink = ()=>{
+ if(!brew.editId) return null;
+
+ let editLink = brew.editId;
+ if(brew.googleId && !brew.stubbed) {
+ editLink = brew.googleId + editLink;
}
- return