OBW - Add number of employees field (https://github.com/woocommerce/woocommerce-admin/pull/7963)
* Add number of employees field * Fix "reduce - spread" anti-pattern This commit fixes the "reduce - spread" anti-pattern https://www.richsnapp.com/article/2019/06-09-reduce-spread-anti-pattern * Add changelog Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
This commit is contained in:
parent
c3a050254d
commit
a90e9de61a
|
@ -0,0 +1,4 @@
|
|||
Significance: minor
|
||||
Type: Add
|
||||
|
||||
OBW - Add number of employees field #7963
|
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
import { __ } from '@wordpress/i18n';
|
||||
|
||||
export const employeeOptions = [
|
||||
{
|
||||
key: '1',
|
||||
label: __( "It's just me", 'woocommerce-admin' ),
|
||||
},
|
||||
{
|
||||
key: '<10',
|
||||
label: __( '< 10', 'woocommerce-admin' ),
|
||||
},
|
||||
{
|
||||
key: '10-50',
|
||||
label: '10 - 50',
|
||||
},
|
||||
{
|
||||
key: '50-250',
|
||||
label: '50 - 250',
|
||||
},
|
||||
{
|
||||
key: '+250',
|
||||
label: __( '+250', 'woocommerce-admin' ),
|
||||
},
|
||||
{
|
||||
key: 'not specified',
|
||||
label: __( "I'd rather not say", 'woocommerce-admin' ),
|
||||
},
|
||||
];
|
|
@ -29,6 +29,7 @@ import { recordEvent } from '@woocommerce/tracks';
|
|||
import { CurrencyContext } from '~/lib/currency-context';
|
||||
import { createNoticesFromResponse } from '~/lib/notices';
|
||||
import { platformOptions } from '../../data/platform-options';
|
||||
import { employeeOptions } from '../../data/employee-options';
|
||||
import { sellingVenueOptions } from '../../data/selling-venue-options';
|
||||
import { getRevenueOptions } from '../../data/revenue-options';
|
||||
import { getProductCountOptions } from '../../data/product-options';
|
||||
|
@ -154,6 +155,7 @@ class BusinessDetails extends Component {
|
|||
const { updateProfileItems, createNotice } = this.props;
|
||||
|
||||
const {
|
||||
number_employees: numberEmployees,
|
||||
other_platform: otherPlatform,
|
||||
other_platform_name: otherPlatformName,
|
||||
product_count: productCount,
|
||||
|
@ -163,6 +165,7 @@ class BusinessDetails extends Component {
|
|||
} = this.state.savedValues;
|
||||
|
||||
const updates = {
|
||||
number_employees: numberEmployees,
|
||||
other_platform: otherPlatform,
|
||||
other_platform_name:
|
||||
otherPlatform === 'other' ? otherPlatformName : '',
|
||||
|
@ -177,10 +180,7 @@ class BusinessDetails extends Component {
|
|||
const finalUpdates = Object.entries( updates ).reduce(
|
||||
( acc, [ key, val ] ) => {
|
||||
if ( val !== '' ) {
|
||||
return {
|
||||
...acc,
|
||||
[ key ]: val,
|
||||
};
|
||||
acc[ key ] = val;
|
||||
}
|
||||
|
||||
return acc;
|
||||
|
@ -237,6 +237,21 @@ class BusinessDetails extends Component {
|
|||
);
|
||||
}
|
||||
|
||||
if (
|
||||
! values.number_employees.length &&
|
||||
[
|
||||
'other',
|
||||
'brick-mortar',
|
||||
'brick-mortar-other',
|
||||
'other-woocommerce',
|
||||
].includes( values.selling_venues )
|
||||
) {
|
||||
errors.number_employees = __(
|
||||
'This field is required',
|
||||
'woocommerce-admin'
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
! values.revenue.length &&
|
||||
[
|
||||
|
@ -260,6 +275,7 @@ class BusinessDetails extends Component {
|
|||
}
|
||||
|
||||
trackBusinessDetailsStep( {
|
||||
number_employees: numberEmployees,
|
||||
other_platform: otherPlatform,
|
||||
other_platform_name: otherPlatformName,
|
||||
product_count: productCount,
|
||||
|
@ -270,6 +286,7 @@ class BusinessDetails extends Component {
|
|||
const { getCurrencyConfig } = this.context;
|
||||
|
||||
recordEvent( 'storeprofiler_store_business_details_continue_variant', {
|
||||
number_employees: numberEmployees,
|
||||
already_selling: sellingVenues,
|
||||
currency: getCurrencyConfig().code,
|
||||
product_number: productCount,
|
||||
|
@ -357,6 +374,26 @@ class BusinessDetails extends Component {
|
|||
{ ...getInputProps( 'selling_venues' ) }
|
||||
/>
|
||||
|
||||
{ [
|
||||
'other',
|
||||
'brick-mortar',
|
||||
'brick-mortar-other',
|
||||
'other-woocommerce',
|
||||
].includes( values.selling_venues ) && (
|
||||
<SelectControl
|
||||
excludeSelectedOptions={ false }
|
||||
label={ __(
|
||||
'How many employees do you have?',
|
||||
'woocommerce-admin'
|
||||
) }
|
||||
options={ employeeOptions }
|
||||
required
|
||||
{ ...getInputProps(
|
||||
'number_employees'
|
||||
) }
|
||||
/>
|
||||
) }
|
||||
|
||||
{ [
|
||||
'other',
|
||||
'brick-mortar',
|
||||
|
|
|
@ -34,6 +34,7 @@ export const BusinessDetailsStep = ( props ) => {
|
|||
}
|
||||
|
||||
const initialValues = {
|
||||
number_employees: profileItems.number_employees || '',
|
||||
other_platform: profileItems.other_platform || '',
|
||||
other_platform_name: profileItems.other_platform_name || '',
|
||||
product_count: profileItems.product_count || '',
|
||||
|
|
|
@ -10,6 +10,7 @@ export const defaultState = {
|
|||
business_extensions: null,
|
||||
completed: null,
|
||||
industry: null,
|
||||
number_employees: null,
|
||||
other_platform: null,
|
||||
other_platform_name: null,
|
||||
product_count: null,
|
||||
|
|
|
@ -130,6 +130,7 @@ export type ProfileItemsState = {
|
|||
business_extensions: [ ] | null;
|
||||
completed: boolean | null;
|
||||
industry: Industry[] | null;
|
||||
number_employees: string | null;
|
||||
other_platform: OtherPlatformSlug | null;
|
||||
other_platform_name: string | null;
|
||||
product_count: ProductCount | null;
|
||||
|
|
|
@ -323,6 +323,21 @@ class OnboardingProfile extends \WC_REST_Data_Controller {
|
|||
'other-woocommerce',
|
||||
),
|
||||
),
|
||||
'number_employees' => array(
|
||||
'type' => 'string',
|
||||
'description' => __( 'Number of employees of the store.', 'woocommerce-admin' ),
|
||||
'context' => array( 'view' ),
|
||||
'readonly' => true,
|
||||
'validate_callback' => 'rest_validate_request_arg',
|
||||
'enum' => array(
|
||||
'1',
|
||||
'<10',
|
||||
'10-50',
|
||||
'50-250',
|
||||
'+250',
|
||||
'not specified',
|
||||
),
|
||||
),
|
||||
'revenue' => array(
|
||||
'type' => 'string',
|
||||
'description' => __( 'Current annual revenue of the store.', 'woocommerce-admin' ),
|
||||
|
|
|
@ -262,6 +262,7 @@ class Onboarding {
|
|||
'product_types' => array(),
|
||||
'product_count' => '0',
|
||||
'selling_venues' => 'no',
|
||||
'number_employees' => '1',
|
||||
'revenue' => 'none',
|
||||
'other_platform' => 'none',
|
||||
'business_extensions' => array(),
|
||||
|
|
|
@ -106,13 +106,14 @@ class WC_Tests_API_Onboarding_Profiles extends WC_REST_Unit_Test_Case {
|
|||
$data = $response->get_data();
|
||||
$properties = $data['schema']['properties'];
|
||||
|
||||
$this->assertCount( 15, $properties );
|
||||
$this->assertCount( 16, $properties );
|
||||
$this->assertArrayHasKey( 'completed', $properties );
|
||||
$this->assertArrayHasKey( 'skipped', $properties );
|
||||
$this->assertArrayHasKey( 'industry', $properties );
|
||||
$this->assertArrayHasKey( 'product_types', $properties );
|
||||
$this->assertArrayHasKey( 'product_count', $properties );
|
||||
$this->assertArrayHasKey( 'selling_venues', $properties );
|
||||
$this->assertArrayHasKey( 'number_employees', $properties );
|
||||
$this->assertArrayHasKey( 'revenue', $properties );
|
||||
$this->assertArrayHasKey( 'other_platform', $properties );
|
||||
$this->assertArrayHasKey( 'other_platform_name', $properties );
|
||||
|
|
Loading…
Reference in New Issue