49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { DeepPartial } from 'fishery';
|
|
import { Product } from './product';
|
|
import { AdapterTypes, ModelRegistry } from '../framework/model-registry';
|
|
import { ModelFactory } from '../framework/model-factory';
|
|
import { APIAdapter } from '../framework/api/api-adapter';
|
|
import faker from 'faker/locale/en';
|
|
|
|
export class SimpleProduct extends Product {
|
|
public constructor( partial: DeepPartial< SimpleProduct > = {} ) {
|
|
super( partial );
|
|
Object.assign( this, partial );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Registers the simple product factory and adapters.
|
|
*
|
|
* @param {ModelRegistry} registry The registry to hold the model reference.
|
|
*/
|
|
export function registerSimpleProduct( registry: ModelRegistry ): void {
|
|
if ( null !== registry.getFactory( SimpleProduct ) ) {
|
|
return;
|
|
}
|
|
|
|
const factory = ModelFactory.define< SimpleProduct, any, ModelFactory< SimpleProduct >>(
|
|
( { params } ) => {
|
|
return new SimpleProduct(
|
|
{
|
|
name: params.name ?? faker.commerce.productName(),
|
|
regularPrice: params.regularPrice ?? faker.commerce.price(),
|
|
},
|
|
);
|
|
},
|
|
);
|
|
registry.registerFactory( SimpleProduct, factory );
|
|
|
|
const apiAdapter = new APIAdapter< SimpleProduct >(
|
|
'/wc/v3/products',
|
|
( model ) => {
|
|
return {
|
|
type: 'simple',
|
|
name: model.name,
|
|
regular_price: model.regularPrice,
|
|
};
|
|
},
|
|
);
|
|
registry.registerAdapter( SimpleProduct, AdapterTypes.API, apiAdapter );
|
|
}
|