@unchainedshop/plugins
Version:
Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters
53 lines (52 loc) • 2 kB
JavaScript
import { EnrollmentDirector, EnrollmentAdapter } from '@unchainedshop/core';
export const rangeMatcher = (date = new Date()) => {
const timestamp = date.getTime();
return ({ start, end }) => {
const startTimestamp = new Date(start).getTime();
const endTimestamp = new Date(end).getTime();
return startTimestamp <= timestamp && endTimestamp >= timestamp;
};
};
const LicensedEnrollments = {
...EnrollmentAdapter,
key: 'shop.unchained.enrollments.licensed',
version: '1.0.0',
label: 'Simple Licensed Enrollments',
isActivatedFor: (productPlan) => {
return productPlan?.usageCalculationType === 'LICENSED';
},
actions: (params) => {
const { enrollment } = params;
return {
...EnrollmentAdapter.actions(params),
isValidForActivation: async () => {
const periods = enrollment?.periods || [];
return periods.findIndex(rangeMatcher()) !== -1;
},
isOverdue: async () => {
return false;
},
configurationForOrder: async (context) => {
const { period } = context;
const beginningOfPeriod = period.start.getTime() <= new Date().getTime();
if (!enrollment)
throw new Error('Enrollment missing in context');
if (beginningOfPeriod) {
return {
period,
orderContext: {},
orderPositionTemplates: [
{
quantity: 1,
productId: enrollment.productId,
originalProductId: enrollment.productId,
},
],
};
}
return null;
},
};
},
};
EnrollmentDirector.registerAdapter(LicensedEnrollments);