{"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":""}