{"version":3,"sources":["webpack:///./src/classes/Product.js"],"names":["Product","dto","imageLibrary","images","requirements","player","this","update","JSON","parse","Object","assign","jsonProps","isString","options","length","map","o","sort","firstBy","forEach","f","i","myOrder","correctOrder","push","inventoryHistory","filter","id","note","x","inventory","inventoryLogSum","organizationProductId","amount","status","keepInventory","finalOptions","calcInventoryChange","organizationId","parentId","name","title","subtitle","description","descriptionIsHtml","price","oldPrice","deleted","published","moreInfo","moreInfoBtn","moreInfoOpen","urlTag","stringify","props","showInStore","m","selected","a","toLowerCase","opt","salesRecords","allPricesUnfiltered","findIndex","allPrices","high","max","low","min","Set","priceRange","size","includes","v","sum","inventoryCount","flatten","l","find","startsWith","substring","limit","altAmount","replace","contactReq","delivery","_props"],"mappings":"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","file":"js/chunk-2d0cf2c6.a7928d3e.js","sourcesContent":["import max from 'lodash.max'\r\nimport min from 'lodash.min'\r\nimport sum from 'lodash.sum'\r\nimport flatten from '../helpers/ArrayFlatten'\r\nimport { firstBy } from 'thenby'\r\n\r\nexport default class Product {\r\n id = 0\r\n organizationId = null\r\n parentId = null\r\n name = null\r\n title = null\r\n subtitle = null\r\n description = null\r\n descriptionIsHtml = true\r\n price = null\r\n oldPrice = null\r\n deleted = false\r\n published = false\r\n moreInfo = null\r\n moreInfoBtn = null\r\n moreInfoOpen = false\r\n urlTag = null\r\n jsonProps = {\r\n imageLibrary: {\r\n images: []\r\n },\r\n requirements: {\r\n player: false\r\n }\r\n }\r\n\r\n _props = []\r\n showInStore = true\r\n inventory = 99999\r\n options = []\r\n player = null\r\n selected = -1\r\n altAmount = null\r\n inventoryHistory = []\r\n myOrder = 0\r\n\r\n constructor (dto) {\r\n if (dto) this.update(dto)\r\n }\r\n\r\n update (dto) {\r\n if (typeof dto === 'string') dto = JSON.parse(dto)\r\n Object.assign(this, dto)\r\n\r\n if (dto.jsonProps) {\r\n const isString = typeof dto.jsonProps === 'string'\r\n this.jsonProps = isString ? JSON.parse(dto.jsonProps) : dto.jsonProps\r\n }\r\n\r\n if (dto.options && dto.options.length > 0) {\r\n this.options = dto.options.map(o => new Product(o))\r\n }\r\n }\r\n\r\n correctOrder () {\r\n if (this.options.length === 0) return\r\n this.options = this.options.sort(firstBy('myOrder'))\r\n this.options.forEach((f, i) => {\r\n f.myOrder = i + 1\r\n f.correctOrder()\r\n })\r\n }\r\n\r\n addOption (dto) {\r\n const o = new Product(dto)\r\n o.myOrder = this.options.length + 1\r\n this.options.push(o)\r\n return o\r\n }\r\n\r\n get dto () {\r\n if (this.keepInventory) {\r\n this.finalOptions.forEach(f => f.calcInventoryChange())\r\n }\r\n return {\r\n id: this.id,\r\n organizationId: this.organizationId,\r\n parentId: this.parentId,\r\n name: this.name,\r\n title: this.title,\r\n subtitle: this.subtitle,\r\n description: this.description,\r\n descriptionIsHtml: this.descriptionIsHtml,\r\n price: +this.price,\r\n oldPrice: this.oldPrice,\r\n deleted: this.deleted,\r\n published: this.published,\r\n moreInfo: this.moreInfo,\r\n moreInfoBtn: this.moreInfoBtn,\r\n moreInfoOpen: this.moreInfoOpen,\r\n urlTag: this.urlTag,\r\n jsonProps: JSON.stringify(this.jsonProps),\r\n props: this.props,\r\n showInStore: this.showInStore,\r\n options: this.options.map(m => m.dto),\r\n inventory: this.inventory,\r\n inventoryHistory: this.inventoryHistory,\r\n myOrder: this.myOrder\r\n }\r\n }\r\n\r\n get purchaseDto () {\r\n return {\r\n id: this.id,\r\n player: this.player ? this.player.dto : null,\r\n urlTag: this.urlTag,\r\n price: this.price\r\n }\r\n }\r\n\r\n get status () {\r\n return this.published ? 'Active' : 'Inactive'\r\n }\r\n\r\n get selectedOption () {\r\n return this.selected >= 0 ? this.options[this.selected] : null\r\n }\r\n\r\n get salesRecords () {\r\n const a = [...this.inventoryHistory.filter(f => f.note.toLowerCase() === 'sale')]\r\n this.options.forEach(opt => {\r\n a.push(...opt.salesRecords)\r\n })\r\n\r\n return a\r\n }\r\n\r\n get comingSoon () {\r\n return this.allPricesUnfiltered.findIndex(f => f <= 0) > -1\r\n }\r\n\r\n get allPricesUnfiltered () {\r\n const a = []\r\n this.price && a.push(+this.price)\r\n this.options.forEach(opt => {\r\n a.push(...opt.allPrices)\r\n })\r\n return a\r\n }\r\n\r\n get allPrices () {\r\n const a = []\r\n this.price && a.push(+this.price)\r\n this.options.forEach(opt => {\r\n a.push(...opt.allPrices)\r\n })\r\n return a.filter(f => f > 0)\r\n }\r\n\r\n get priceRange () {\r\n const high = max(this.allPrices)\r\n const low = min(this.allPrices)\r\n\r\n return [low, high]\r\n }\r\n\r\n get hasRange () {\r\n const x = new Set(this.priceRange)\r\n return x.size > 1\r\n }\r\n\r\n get keepInventory () {\r\n return this.props.includes('inventory')\r\n }\r\n\r\n set keepInventory (v) {\r\n this.props = this.props.filter(f => f !== 'inventory')\r\n if (v) {\r\n this.props.push('inventory')\r\n }\r\n this.options.forEach(o => { o.keepInventory = v })\r\n }\r\n\r\n get inventoryCount () {\r\n return this.options.length ? sum(this.options.map(m => m.inventoryCount)) : this.inventory\r\n }\r\n\r\n get inventoryLogSum () {\r\n const i = this.inventoryHistory.filter(f => f.id > 0)\r\n return i.length > 0 ? sum(i.map(m => m.amount)) : 0\r\n }\r\n\r\n calcInventoryChange () {\r\n this.inventoryHistory = this.inventoryHistory.filter(f => f.id > 0)\r\n const note = this.inventoryHistory.length === 0 ? 'Starting Inventory' : 'Inventory Adjustment'\r\n const x = this.inventory - this.inventoryLogSum\r\n if (x !== 0) {\r\n this.inventoryHistory.push({\r\n id: 0,\r\n organizationProductId: this.id,\r\n amount: x,\r\n note: note,\r\n status: 'In Browser'\r\n })\r\n }\r\n }\r\n\r\n get finalOptions () {\r\n return flatten(this.options.length ? this.options.map(o => o.finalOptions) : [this])\r\n }\r\n\r\n get limit () {\r\n const l = this.props.find(f => f.startsWith('limit-'))\r\n if (l) {\r\n return +l.substring(6)\r\n }\r\n return 99\r\n }\r\n\r\n set limit (v) {\r\n this.props = this.props.filter(f => !f.startsWith('limit-'))\r\n if (v) {\r\n this.props.push(`limit-${v}`)\r\n }\r\n this.options.forEach(o => { o.limit = v })\r\n }\r\n\r\n get hasLimit () {\r\n return this.props.find(f => f.startsWith('limit-'))\r\n }\r\n\r\n get iLimit () {\r\n if (this.keepInventory) {\r\n return min([this.inventoryCount, this.limit])\r\n }\r\n return this.limit\r\n }\r\n\r\n get displayPrice () {\r\n return this.price === -13 ? this.altAmount : this.price\r\n }\r\n\r\n get pickupOnly () {\r\n return !!this.props.find(f => f.startsWith('pickupOnly'))\r\n }\r\n\r\n get shippingOnly () {\r\n return !!this.props.find(f => f.startsWith('shippingOnly'))\r\n }\r\n\r\n get donation () {\r\n return !!this.props.find(f => f.startsWith('donation'))\r\n }\r\n\r\n get contactReq () {\r\n const l = this.props.find(f => f.startsWith('require-'))\r\n if (l) {\r\n return l.replace('require-', '')\r\n }\r\n return 'contact'\r\n }\r\n\r\n set contactReq (v) {\r\n this.props = this.props.filter(f => !f.startsWith('require-'))\r\n if (v) {\r\n this.props.push(`require-${v}`)\r\n }\r\n this.options.forEach(o => { o.contactReq = v })\r\n }\r\n\r\n get delivery () {\r\n const l = this.props.find(f => f.startsWith('delivery-'))\r\n if (l) {\r\n return l.replace('delivery-', '')\r\n }\r\n return 'pickup'\r\n }\r\n\r\n set delivery (v) {\r\n this.props = this.props.filter(f => !f.startsWith('delivery-'))\r\n if (v) {\r\n this.props.push(`delivery-${v}`)\r\n }\r\n this.options.forEach(o => { o.delivery = v })\r\n }\r\n\r\n get props () {\r\n return this._props\r\n }\r\n\r\n set props (v) {\r\n this._props = v\r\n this.options.forEach(o => { o.props = [...v] })\r\n }\r\n\r\n get imageLibrary () {\r\n return this.jsonProps.imageLibrary\r\n }\r\n\r\n get displayImages () {\r\n return this.jsonProps.imageLibrary.images\r\n }\r\n}\r\n"],"sourceRoot":""}