mango-cms 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli.js CHANGED
@@ -127,7 +127,8 @@ program
127
127
  ✨ Project ${answers.projectName} created successfully!
128
128
  To get started:
129
129
  cd ${answers.projectName}
130
- mango start
130
+ npm install
131
+ npm mango start
131
132
  `);
132
133
  } catch (error) {
133
134
  console.error('Error creating project:', error.message);
@@ -1,4 +1,4 @@
1
- import { readEntries, updateEntry } from "../../mango/src/cms/1. build/libraries/mongo"
1
+ import { readEntries, updateEntry } from "@cms/1. build/libraries/mongo"
2
2
 
3
3
  export default {
4
4
  fields: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mango-cms",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "main": "index.js",
5
5
  "author": "Colton Neifert",
6
6
  "license": "ISC",
@@ -1,206 +0,0 @@
1
- // import CMS from '../../../mango/src/cms' (for use like {address: CMS.fields.Address()})
2
- import fields from '@cms/1. build/fields'
3
- import { readEntries, readEntry } from '../../../mango/src/cms/1. build/libraries/mongo'
4
-
5
- const billing = {
6
- fields: {
7
- paymentId: String,
8
- firstName: { type: String, search: { enabled: true, weight: 5 } },
9
- lastName: { type: String, search: { enabled: true, weight: 5 } },
10
- phoneNumber: String,
11
- address: fields.Address(),
12
- payment: {
13
- fields: {
14
- creditCard: {
15
- fields: {
16
- cardNumber: String,
17
- cardType: String,
18
- expirationDate: String,
19
- }
20
- },
21
- bankAccount: {
22
- fields: {
23
- accountNumber: String,
24
- accountType: String,
25
- echeckType: String,
26
- nameOnAccount: String,
27
- routingNumber: String
28
- }
29
- }
30
- }
31
- }
32
- }
33
- }
34
-
35
- const Items = {
36
- name: 'items',
37
- singular: 'item',
38
- fields: {
39
- price: { type: 'Int' },
40
- stock: { type: 'Int' },
41
- description: fields.PlainText(),
42
- },
43
- hooks: {
44
- sold({ item }) {
45
- console.log('sold', item.title)
46
- },
47
- addedToCart({ item }) {
48
- console.log('addedToCart', item.title)
49
- },
50
- removedFromCart({ item }) {
51
- console.log('removedFromCart', item.title)
52
- }
53
- }
54
- }
55
-
56
- const Discounts = {
57
- name: 'discounts',
58
- singular: 'discount',
59
- permissions: {
60
- public: ['create', 'read']
61
- },
62
- fields: {
63
- type: fields.Select({ options: ['coupon', 'sale'], required: true }),
64
- code: { required: true, translateInput: i => i.toLowerCase() },
65
- limitations: {
66
- fields: {
67
- items: fields.Relationship({ collection: 'item' }),
68
- perCustomer: 'Int',
69
- totalUses: 'Int',
70
- perOrder: 'Int',
71
- quantity: 'Int',
72
- // remainingUses: {
73
- // computed: doc => doc.limitations.totalUses ? /* Get times used and subtract from total uses */ : null
74
- // }
75
- }
76
- },
77
- freeShipping: Boolean,
78
- discount: {
79
- inputExample: '$12.50 or 50% etc.',
80
- inputType: String,
81
- validate: input => ({ valid: (!!input.match(/\$[0-9]+/) || input.match(/[0-9]\%+/)) ? true : false, response: 'Should be formatted like `100%` or `$12.50`' }),
82
- translateInput: input => ({
83
- type: !!input.match(/\$[0-9]+/) ? 'fixed' : 'percentage',
84
- value: !!input.match(/\$[0-9]+/) ? input.match(/\$\d+(?:\.\d+)?/)[0].replace('$', '') : input.match(/(\d+|\d+[.,]\d{1,2})(?=\s*%)/)[0].replace('%', '')
85
- }),
86
- fields: {
87
- type: String,
88
- value: 'Float'
89
- }
90
- }
91
- }
92
- }
93
-
94
-
95
- const Carts = {
96
- name: 'carts',
97
- singular: 'cart',
98
- permissions: {
99
- public: ['create', 'read', 'update']
100
- },
101
- fields: {
102
-
103
- title: { required: false },
104
-
105
- transactionId: String,
106
- finalized: Boolean,
107
- completed: Boolean,
108
- completedDate: fields.Timestamp(),
109
- cartItems: [{
110
- fields: {
111
- quantity: 'Int',
112
- discount: 'Float',
113
- item: fields.Relationship({ collection: 'item', single: true }),
114
- }
115
- }],
116
- coupons: fields.Relationship({ collection: 'discount' }),
117
-
118
- customerId: String,
119
- billing,
120
- shipping: {
121
- fields: {
122
- method: String,
123
- price: String,
124
- addressId: String,
125
- firstName: String,
126
- lastName: String,
127
- phoneNumber: String,
128
- address: fields.Address(),
129
- free: { type: Boolean, computed: doc => doc?.coupons?.find(c => c.freeShipping) }
130
- }
131
- },
132
-
133
- price: {
134
- fields: {
135
- subtotal: 'Float',
136
- discount: 'Float',
137
- total: 'Float',
138
- },
139
- computed: async doc => {
140
-
141
- let subtotal = Number(doc.cartItems?.reduce((a, i) => a + ((i.item?.price || 0) * i.quantity), 0)) || 0
142
- let shipping = doc?.shipping?.price || 0
143
-
144
- let discount = 0
145
-
146
- if (doc?.coupons?.length) {
147
- let coupon = doc?.coupons?.[0]
148
- if (coupon?.limitations?.items) {
149
- for (let item of doc.cartItems) {
150
- if (coupon?.limitations?.items?.find(i => i.id == item.item?.id)) {
151
- if (coupon.discount.type == 'fixed') {
152
- discount += (item.quantity * coupon.discount.value)
153
- } else {
154
- discount += ((item.quantity * item.item.price) * (Number(coupon.discount.value) / 100))
155
- console.log('discount', discount)
156
- }
157
- }
158
- }
159
- } else {
160
- if (coupon.discount.type == 'fixed') {
161
- discount = Number(coupon.discount.value > subtotal ? subtotal : coupon.discount.value)
162
- } else {
163
- discount = Number(subtotal * (Number(coupon.discount.value) / 100))
164
- }
165
- }
166
- }
167
-
168
- let activeSales = await readEntries({ collection: 'discounts', search: { type: 'sale', startDate: { $lt: new Date() }, endDate: { $gt: new Date() } } })
169
-
170
- if (activeSales?.length) {
171
- for (let item of doc.cartItems) {
172
- for (let sale of activeSales.sort((a, b) => b.discount.value < a.discount.value ? 1 : -1)) {
173
- let saleApplies = sale?.limitations?.items?.some(i => i == item.item?.id) || !sale?.limitations?.items?.length
174
- if (saleApplies) {
175
- if (sale.discount.type == 'fixed') {
176
- item.discount = (item.quantity * sale.discount.value)
177
- } else {
178
- item.discount = Number((item.quantity * item.item.price) * (Number(sale.discount.value) / 100))
179
- }
180
- }
181
- }
182
- }
183
- discount = Number(doc.cartItems?.reduce((a, i) => a + i.discount, 0))
184
- }
185
-
186
- let total = (subtotal + shipping - discount) || 0
187
-
188
- return {
189
- subtotal,
190
- discount,
191
- total,
192
- }
193
- }
194
- }
195
-
196
- },
197
- }
198
-
199
- export default {
200
- name: 'mangoStand',
201
- collections: [
202
- Items,
203
- Carts,
204
- Discounts,
205
- ],
206
- }