Hire a web Developer and Designer to upgrade and boost your online presence with cutting edge Technologies

Wednesday, January 23, 2019

A simplified SMART plan can help your business in 2018

 

We are one week into 2018. Do you know where your business plan is?

A simplified SMART plan can help your business in 2018. A traditional plan may be just too daunting for most Amazon and online sellers. And let’s face it – a lot of business plan formats are just…long. They are lengthy, detailed and full of information that’s not necessary unless you are applying for a business loan or trying to entice a suitor.

So if you’re an entrepreneur more focused on hustle than documentation, how about creating a quick bullet-point business plan based on SMART goals for 2018?

Just make sure your goals are:

  1. Specific (simple, sensible, significant)
  2. Measurable (meaningful, motivating)
  3. Achievable (agreed, attainable)
  4. Relevant (reasonable, realistic and resources, results-based)
  5. Time bound (time-based, time-limited, timely, time-sensitive)

Don’t worry, it won’t take long. Just a few bullet points on a page can give you new focus for success this year.

But here’s the most important part. Make an appointment with yourself for the first day of the month, every month for the rest of the year. Write it in your appointment book or set an alarm on your phone today! That way, you’ll review those goals and make sure you stay on track.

Thursday, January 17, 2019

Higher-Order Components In React

In this tutorial, we are going to learn about higher-order components, the syntax of higher-order components, as well as use cases for them. In the process, we will build a higher-order component from an existing React component. By the end of this tutorial, you will understand the basics of higher-order components and how to build them.
Higher-order components (HOCs) in React were inspired by higher-order functions in JavaScript. A HOC is an advanced technique for reusing logic in React components. It is a pattern created out of React’s compositional nature.
HOCs basically incorporate the don’t-repeat-yourself (DRY) principle of programming, which you’ve most likely come across at some point in your career as a software developer. It is one of the best-known principles of software development, and observing it is very important when building an application or writing code in general.
In this tutorial, we will learn what a HOC is, its basic structure, some use cases, and finally an example.
Note: Basic knowledge of React and JavaScript will come in handy as you work through this tutorial.

Higher-Order Functions In JavaScript

Before jumping into HOCs in React, let’s briefly discuss higher-order functions in JavaScript. Understanding them is critical to understanding our topic of focus.
Higher-order functions in JavaScript take some functions as arguments and return another function. They enable us to abstract over actions, not just values, They come in several forms, and they help us to write less code when operating on functions and even arrays.
The most interesting part of using higher-order functions is composition. We can write small functions that handle one piece of logic. Then, we can compose complex functions by using the different small functions we have created. This reduces bugs in our code base and makes our code much easier to read and understand.
JavaScript has some of these functions already built in. Some examples of higher-order functions are the following:
  • .forEach()
    This iterates over every element in an array with the same code, but does not change or mutate the array, and it returns undefined.
  • .map()
    This method transforms an array by applying a function to all of its elements, and then building a new array from the returned values.
  • .reduce()
    This method executes a provided function for each value of the array (from left to right).
  • .filter()
    This checks every single element in an array to see whether it meets certain criteria as specified in the filter method, and then it returns a new array with the elements that match the criteria.
So many higher-order functions are built into JavaScript, and you can make your own custom ones.

An Example Of Custom Higher-Order Function

Suppose we are asked to write a function that formats integers as currencies, including some customization of specifying the currency symbol and adding a decimal separator for the currency amount. We can write a higher-other function that takes the currency symbol and also the decimal separator. This same function would then format the value passed to it with the currency symbol and decimal operators. We would name our higher-order function formatCurrency.
const formatCurrency = function( 
    currencySymbol,
    decimalSeparator  ) {
    return function( value ) {
        const wholePart = Math.trunc( value / 100 );
        let fractionalPart = value % 100;
        if ( fractionalPart < 10 ) {
            fractionalPart = '0' + fractionalPart;
        }
        return `${currencySymbol}${wholePart}${decimalSeparator}${fractionalPart}`;
    }
}
formatCurrency returns a function with a fixed currency symbol and decimal separator.
We then pass the formatter a value, and format this value with the function by extracting its whole part and the fractional part. The returned value of this function is constructed by a template literal, concatenating the currency symbol, the whole part, the decimal separator, and the fractional part.
Let’s use this higher-order function by assigning a value to it and seeing the result.
> getLabel = formatCurrency( '$', '.' );
 
> getLabel( 1999 )
"$19.99" //formatted value
 
> getLabel( 2499 )
"$24.99" //formatted value
You might have noticed that we created a variable named getLabel, then assigned our formatCurrency higher-order function, and then passed the currency formatters to the function, which is the currency symbol and a decimal separator. To make use of the function, we call getLabel, which is now a function, and we pass in the value that needs to be formatted. That’s all! We have created a custom higher order of our choice.

What Is A Higher-Order Component?

A higher-order component (HOC) is an advanced element for reusing logic in React components. Components take one or more components as arguments, and return a new upgraded component. Sounds familiar, right? They are similar to higher-order functions, which take some functions as an argument and produce a new function.
HOCs are commonly used to design components with certain shared behavior in a way that makes them connected differently than normal state-to-props pattern.

Facts About HOCs

  1. We don’t modify or mutate components. We create new ones.
  2. A HOC is used to compose components for code reuse.
  3. A HOC is a pure function. It has no side effects, returning only a new component.
Here are some examples of real-world HOCs you might have come across:
react-reduxconnect(mapStateToProps, mapDispatchToProps)(UserPage)
react-routerwithRouter(UserPage)
material-uiwithStyles(styles)(UserPage)

Structure Of A Higher-Order Component

A HOC is structured like a higher-order function:
  • It is a component.
  • It takes another component as an argument.
  • Then, it returns a new component.
  • The component it returns can render the original component that was passed to it.
The snippet below shows how a HOC is structured in React:

import React from 'react';
// Take in a component as argument WrappedComponent
const higherOrderComponent = (WrappedComponent) => {
// And return another component
  class HOC extends React.Component {
    render() {
      return <WrappedComponent />;
    }
  }
  return HOC;
};
We can see that higherOrderComponent takes a component (WrappedComponent) and returns another component inside of it. With this technique, whenever we need to reuse a particular component’s logic for something, we can create a HOC out of that component and use it wherever we like.

Use Cases

In my experience as a front-end engineer who has been writing React for a while now, here are some use cases for HOCs.
Show a loader while a component waits for data
Most of the time, when building a web application, we would need to use a loader of some sort that is displayed while a component is waiting for data to be passed to its props. We could easily use an in-component solution to render the loader, which would work, but it wouldn’t be the most elegant solution. Better would be to write a common HOC that can track those props; and while those props haven’t been injected or are in an empty state, it can show a loading state.
To explain this properly, let’s build a list of categories of public APIs, using its open API. We tend to handle list-loading, so that our clients don’t panic when the API we are getting data from takes so much time to respond.
Let’s generate a React app:
npx create-react-app repos-list
A basic list component can be written as follows:
//List.js
import React from 'react';
const List = (props) => {
  const { repos } = props;
  if (!repos) return null;
  if (!repos.length) return <p>No repos, sorry</p>;
  return (
    <ul>
      {repos.map((repo) => {
        return <li key={repo.id}>{repo.full_name}</li>;
      })}
    </ul>
  );
};
export default List;
The code above is a list component. Let’s break down the code into tiny bits so that we can understand what is happening.
const List = (props) => {};
Above, we initialize our functional component, named List, and pass props to it.
const { repos } = props;
Then, we create a constant, named repos, and pass it to our component props, so that it can be used to modify our component.
if (!repos) return null;
if (!repos.length) return <p>No repos, sorry</p>;
Above, we are basically saying that, if after fetching has completed and the repos prop is still empty, then it should return null. We are also carrying out a conditional render here: If the length of the repos prop is still empty, then it should render “No repos, sorry” in our browser.
return (
    <ul>
      {repos.map((repo) => {
        return <li key={repo.id}>{repo.full_name}</li>;
      })}
    </ul>
  );
Here, we are basically mapping through the repos array and returning a list of repos according to their full names, with a unique key for each entry.
Now, let’s write a HOC that handles loading, to make our users happy.
//withdLoading.js
import React from 'react';
function WithLoading(Component) {
  return function WihLoadingComponent({ isLoading, ...props }) {
    if (!isLoading) return <Component {...props} />;
    return <p>Hold on, fetching data might take some time.</p>;
  };
}
export default WithLoading;
This would display the text “Hold on, fetching data might take some time” when the app is still fetching data and the props are being injected into state. We make use of isLoading to determine whether the component should be rendered.
Now, in your App.js file, you could pass the loading logic to WithLoading, without worrying about it in your List .
import React from 'react';
import List from './components/List.js';
import WithLoading from './components/withLoading.js';
const ListWithLoading = WithLoading(List);
class App extends React.Component {
  state = {
{
  };
  componentDidMount() {
    this.setState({ loading: true });
    fetch(`https://api.github.com/users/hacktivist123/repos`)
      .then((json) => json.json())
      .then((repos) => {
        this.setState({ loading: false, repos: repos });
      });
  }
  render() {
    return (
      <ListWithLoading
        isLoading={this.state.loading}
        repos={this.state.repos}
      />
    );
  }
}
export default App;
The code above is our entire app. Let’s break it down to see what is happening.
class App extends React.Component {
  state = {
    loading: false,
    repos: null,
  };
  componentDidMount() {
    this.setState({ loading: true });
    fetch(`https://api.github.com/users/hacktivist123/repos`)
      .then((json) => json.json())
      .then((repos) => {
        this.setState({ loading: false, repos: repos });
      });
  }
All we are doing here is creating a class component named App(), then initializing state with two properties, loading: false, and repos: null,. The initial state of loading is false, while the initial state of repos is also null.
Then, when our component is mounting, we set the state of the loading property to true, and immediately make a fetch request to the API URL that holds the data we need to populate our List component. Once the request is complete, we set the loading state to false and populate the repos state with the data we have pulled from the API request.
const ListWithLoading = WithLoading(List);
Here, we create a new component named ListWithLoading and pass the WithLoading HOC that we created and also the List component in it.
render() {
    return (
      <ListWithLoading
        isLoading={this.state.loading}
        repos={this.state.repos}
      />
    );
  }
Above, we render the ListWithLoading component, which has been supercharged by the WithLoading HOC that we created and also the List component in it. Also, we pass the loading state’s value and the repos state’s value as props to the component.
Because the page is still trying to pull data from the API, our HOC will render the following text in the browser.

When loading is done and the props are no longer in an empty state, the repos will be rendered to the screen.

Conditionally Render Components

Suppose we have a component that needs to be rendered only when a user is authenticated — it is a protected component. We can create a HOC named WithAuth() to wrap that protected component, and then do a check in the HOC that will render only that particular component if the user has been authenticated.
A basic withAuth() HOC, according to the example above, can be written as follows:
// withAuth.js
import React from "react";
export function withAuth(Component) {
    return class AuthenticatedComponent extends React.Component {
        isAuthenticated() {
            return this.props.isAuthenticated;
        }

        /**
         * Render
         */
        render() {
            const loginErrorMessage = (
                <div>
                    Please <a href="/login">login</a> in order to view this part of the application.
                </div>
            );

            return (
                <div>
                    { this.isAuthenticated === true ? <Component {...this.props} /> : loginErrorMessage }
                </div>
            );
        }
    };
}

export default withAuth;
The code above is a HOC named withAuth. It basically takes a component and returns a new component, named AuthenticatedComponent, that checks whether the user is authenticated. If the user is not authenticated, it returns the loginErrorMessage component; if the user is authenticated, it returns the wrapped component.
Note: this.props.isAuthenticated has to be set from your application’s logic. (Or else use react-redux to retrieve it from the global state.)
To make use of our HOC in a protected component, we’d use it like so:
// MyProtectedComponent.js
import React from "react";
import {withAuth} from "./withAuth.js";

export class MyProectedComponent extends React.Component {
    /**
     * Render
     */
    render() {
        return (
            <div>
                This is only viewable  by authenticated users.
            </div>
        );
    }
}

// Now wrap MyPrivateComponent with the requireAuthentication function 
export default withAuth(MyPrivateComponent);
Here, we create a component that is viewable only by users who are authenticated. We wrap that component in our withAuth HOC to protect the component from users who are not authenticated.

Provide Components With Specific Styling

Continuing the use case above, based on whatever UI state you get from the HOC, you can render specific styles for specific UI states. For example, if the need arises in multiple places for styles like backgroundColor, fontSize and so on, they can be provided via a HOC by wrapping the component with one that just injects props with the specific className.
Take a very simple component that renders “hello” and the name of a person. It takes a name prop and some other prop that can affect the rendered JavaScript XML (JSX).
// A simple component 
const HelloComponent = ({ name, ...otherProps }) => (
 <div {...otherProps}>Hello {name}!/div>
);
Let’s create a HOC named withStyling that adds some styling to the “hello” text.
const withStyling = (BaseComponent) => (props) => (
  <BaseComponent {...props} style={{ fontWeight: 700, color: 'green' }} />
);
In order to make use of the HOC on our HelloComponent, we wrap the HOC around the component. We create a pure component, named EnhancedHello, and assign the HOC and our HelloComponent, like so :
const EnhancedHello = withStyling(HelloComponent);
To make a change to our HelloComponent, we render the EnhancedHello component:
<EnhancedHello name='World' />
Now, the text in our HelloComponent becomes this:
<div style={{fontWeight: 700, color: 'green' }}>Hello World</div>

Provide A Component With Any Prop You Want

This is a popular use case for HOCs. We can study our code base and note what reusable prop is needed across components. Then, we can have a wrapper HOC to provide those components with the reusable prop.
Let’s use the example above:
// A simple component 
const HelloComponent = ({ name, ...otherProps }) => (
 <div {...otherProps}>Hello {name}!</div>
);
Let’s create a HOC named withNameChange that sets a name prop on a base component to “New Name”.
const withNameChange = (BaseComponent) => (props) => (
  <BaseComponent {...props} name='New Name' />
);
In order to use the HOC on our HelloComponent, we wrap the HOC around the component, create a pure component named EnhancedHello2, and assign the HOC and our HelloComponent like so:
const EnhancedHello2 = withNameChange(HelloComponent);
To make a change to our HelloComponent, we can render the EnhancedHello component like so:
<EnhancedHello />
Now, the text in our HelloComponent becomes this:
<div>Hello New World</div>
To change the name prop, all we have to do is this:
<EnhancedHello name='Shedrack' />
The text in our HelloComponent becomes this:
<div>Hello Shedrack</div>

Let’s Build A Higher-Order Component

In this section, we will build a HOC that takes a component that has a name prop, and then we will make use of the name prop in our HOC.
So, generate a new React app with create-react-app, like so:
npx create-react-app my-app
After it is generated, replace the code in your index.js file with the following snippet.
import React from 'react';
import { render } from 'react-dom';
const Hello = ({ name }) =>
  <h1>
    Hello {name}!
  </h1>;

function withName(WrappedComponent) {
  return class extends React.Component {
    render() {
      return <WrappedComponent name="Smashing Magazine" {...this.props} />;
    }
  };
}
const NewComponent = withName(Hello);
const App = () =>
  <div>
    <NewComponent />
  </div>;
render(<App />, document.getElementById('root'));
Once you have replaced the code in your index.js file, you should see on your screen.
Let’s go through the snippet bit by bit.
const Hello = ({ name }) =>
  <h1>
    Hello {name}!
  </h1>;
Here, we create a functional component that has a prop called name. In this functional component, we render the “Hello” and the value of the name prop in an h1 tag.
function withName(WrappedComponent) {
  return class extends React.Component {
    render() {
      return <WrappedComponent name="Smashing Magazine" {...this.props} />;
    }
  };
}
Above, we create a higher-order functional component named withName(). Then, we return an anonymous class component inside that renders the component wrapped in the HOC. And we assign a value to the prop of the wrapped component.
const NewComponent = withName(Hello);
Here, we create a new component named NewComponent. We use the HOC that we created, and assign to it the functional component that we created at the start of the code base, named hello.
const App = () =>
  <div>
    <NewComponent />
  </div>;
render(<App />, document.getElementById('root'));
All we are doing above is creating another functional component, named App. It renders the NewComponent that we upgraded with our HOC in a div. Then, we use the react-dom function render to display the component in the browser.
That’s all we need to do! Our withName function takes a component as an argument and returns a HOC. A few months from now, if we decide to change things around, we only have to edit our HOC.

Conclusion

I hope you’ve enjoyed working through this tutorial. You can read more about higher-order components in the references listed below. If you have any questions, leave them in the comments section below. I’ll be happy to answer every one.

Resources And References


Wednesday, January 2, 2019

Amazon can permanently hold sellers’ funds

 

Sellers beware. Amazon can permanently hold sellers’ funds for a growing number of accounts. Even more frightening, the path to recovering that money is long, difficult and expensive.

We’ve seen all manner of reasons that Amazon can permanently hold sellers’ funds:

  1. Violations of terms of service, such as selling prohibited products. Particularly hard-hit are sellers who have offered vaping equipment and accessories. 
  2. Products that are allegedly counterfeit/inauthentic.
  3. Fake or manipulated invoices. Even the editing of a date can get a seller busted.
  4. Poor invoices with suppliers that cannot be verified, leading to concern that products are counterfeit/inauthentic.
  5. Code of conduct violations. This is a broad category, which Seller Performance can use and/or abuse to ban sellers from the platform.

Here’s what happens. Amazon suspends a seller account for one of these reasons. The seller is given a chance to appeal. When the appeal is submitted, they almost immediately receive a denial, as well as a notice that funds are being held. After some time passes, the seller is given an option to appeal for funds – but that typically involves the same burden of proof as an account reinstatement. Therefore, the likelihood of success is low.

Can this happen to anyone? Unfortunately, yes. But there are simple, common-sense steps you can follow to protect yourself.

  1. Don’t sell prohibited products. The folks selling vaping equipment and accessories knew they were breaking Terms of Service. (If they didn’t, they weren’t paying attention.) Some of these sellers try to use the argument that vaping products are legal in their states. Newsflash: Amazon doesn’t care. They expect you to follow their rules, and their rules are clearly stated on the web site. The same goes for marijuana-related items. Just because it’s legal in your state, doesn’t mean Amazon wants the liability of you selling it.
  2. Upgrade your sourcing. Risk management is a big part of your sourcing strategy – or should be. To safeguard your account – and your funds – you need trustworthy vendors. A recent client bought inventory on a liquidation web site simply because the invoice said “authentic” for Apple and Samsung items. But common sense says you need a reliable chain of custody to be sure your inventory is the real deal.
  3. Manage invoices as though your life depended on it. Because your selling life does. For every purchase, make sure you have complete and thorough documentation – invoices with clear information about your supplier, thorough contact information for you, and a full description of the product you bought. If you have receipts, scan them. Document every dollar spent, and be ready to provide the information at a moment’s notice.
  4. Keep it clean. All but the most angelic sellers have been tempted to break the rules. Maybe you’ve wanted to ask a customer to review a negative review. Perhaps you’ve wanted to buy out a competitor’s inventory so you can raise your prices. There are as many ways to break terms of service as there are lost units in Amazon fulfillment centers.

 

If you do find yourself in these circumstances, you can be successful against Amazon. Our best advice:

  1. Hire a pro. Yes, this sounds like self-service advice coming from a reinstatement professional. But certain cases definitely call for an experienced company. Why? You will not get reinstated on the first try, nor through Seller Performance. You need escalations, a compelling explanation, and an impeccable plan of action.
  2. Settle in for the long haul. This is not a problem quickly solved. It can take a month or more to run the gamut of escalations.
  3. Be ready to produce documentation. Your consultant will need a lot of records and information to help unlock your funds.
  4. Go the appeals route first. It’s tempting to head straight for arbitration. But remember, because you must abide by Amazon-written Terms of Service, Amazon holds all the cards. Try an account appeal, followed by a funds appeal. Arbitration comes last.

Tuesday, January 1, 2019

Follow the rules

 

Being honest has become one of the most critical values for Amazon sellers. Why follow the rules? Because Amazon is increasingly cracking down on sellers who fib, manipulate or otherwise break the rules.

Here are some recent examples:

  1. Amazon has begun wielding the big stick of “Code of Conduct” violations to immediately block seller accounts. These account closures are particularly challenging since they often to not fully inform the seller what rules were allegedly broken.
  2. Suspensions for suspected forged or manipulated documents are increasingly difficult to overturn – even for honest sellers who sent in real documents, but may have had some other problematic account issues in the past.
  3. Amazon has silently partnered with textbook manufacturers and other brand owners to serve lawsuits against sellers who – knowingly or unknowingly – sold counterfeit or sketchy products.
  4. Internally, Amazon has launched multiple investigations against staff members who were selling data and other favors to sellers. The sellers involved were summarily shut down.
  5. Amazon is building on its history of going after sellers and service providers who use shady tactics and violate Terms of Service to “help” clients. A perfect example is the review-buying services that helped sellers purchase positive reviews for their products.

Amazon sellers are reasonably frustrated with Seller Support and Seller Performance don’t live up to their promises. But in Amazon’s eyes, that is all irrelevant. Seller still must provide authentic products at fair prices, stick to terms of service, and supply Amazon with whatever documents it requests.

Here are some rules to live by. If you currently cannot follow any of these rules, take the steps to put new processes in place – now.

  1. Have real, true and unaltered invoices ready at a moment’s notice. The failure to do this plagues a huge portion of our clients. Amazon expects that you be able to show the chain of custody for your products and prove their authenticity. If you can’t, you will have problems. You need a true document management system to accomplish this, and all employees involved in answering Performance Notifications need access.
  2. Don’t give in to temptation to create fake invoices. Amazon has incredible technology at its fingertips. They will figure it out eventually. We’ve seen clients suspended even six months after submitting false documents.
  3. Set up a real quality control system. Your staff needs to know your products, inspect your products, and weed out the bad suppliers. Fakes are everywhere. You cannot sell them – even accidentally.
  4. Don’t pay to play. We get the questions all the time: Can you help me pay someone to get my account back? Can you pay someone to get me ungated? Can you help me buy a clean account? Our answer is always a resounding no. We cannot put our business at risk. But more importantly, we will not put you at risk of personal or business liability for corporate espionage activities.
  5. Know the terms of service and stick to them. Ignorance is not a defense. Amazon expects you to follow its rules about reviews, refunds, shipping …. All of it.