2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{X as l}from"./index-caf247db.js";import{g as F,h as O,c as R,d as L,e as C}from"./supabaseTableQuery-95762ff3.js";const N="*, product_attributes(*, attributes(*)), variants(*, variant_attribute_values(*))",V=new Set(["description","price","sku","is_active","code","title","title_fa","brand_id","collection_id","body","original_image","is_show","display_price","count_order","count_fav","count_view","count","seo_title","meta","min_price","max_price","type","files","owner_id","discount","discount_type","box_size","sell_type","weight","product_type","rial_fee","percent_fee","auto_calculate","is_exist","post_shipping_cost","max_qty_per_order"]);function P(t){var e;return(((e=t.variants)==null?void 0:e.length)??0)>0||t.type==="variant"}function b(t,e){const r=t.price!=null?Number(t.price):0;return r>0?r:Number(e??0)}function S(t,e,r){const i=t.discount!=null?Number(t.discount):0;if(i>0)return{discount:i,discount_type:t.discount_type??"percent"};const s=e!=null?Number(e):0;return s>0?{discount:s,discount_type:r??"percent"}:{discount:null,discount_type:null}}function k(t,e,r,i){const s=t.map(a=>b(a,i)),n=s.length?Math.min(...s):0,o=s.length?Math.max(...s):0;if((e??0)>0){const a=t.map(c=>m(b(c,i),e,r??"percent")),u=t.map(c=>{const _=b(c,i),p=S(c,e,r);return m(_,p.discount,p.discount_type)});return{price:n,display_price:a.length?Math.min(...a):n,min_price:u.length?Math.min(...u):n,max_price:u.length?Math.max(...u):o,discount:e??null,discount_type:r??"percent"}}return{price:n,display_price:n,min_price:n,max_price:o,discount:null,discount_type:null}}function E(t){const e=P(t),r=new Set(["count","display_price","min_price","max_price","price"]),i={};for(const[s,n]of Object.entries(t))!V.has(s)||n===void 0||e&&r.has(s)||(i[s]=n);if(i.type=e?"variant":"simple",i.max_qty_per_order!=null){const s=Number(i.max_qty_per_order);i.max_qty_per_order=Number.isFinite(s)&&s>0?s:null}if(e){const s=t.variants??[],n=t.discount!=null?Number(t.discount):null,o=t.discount?t.discount_type??"percent":null,d=t.price!=null?Number(t.price):null,a=k(s,n,o,d),u=s.map(c=>Number(c.stock??0));i.price=a.price,i.discount=a.discount,i.discount_type=a.discount_type,i.count=u.reduce((c,_)=>c+_,0),i.display_price=a.display_price,i.min_price=a.min_price,i.max_price=a.max_price,i.is_exist=u.length?u.some(c=>c>0):t.is_exist??!0}else{const s=Number(t.price??0),n=t.discount!=null?Number(t.discount):null,o=t.discount_type??"percent";i.price=s,i.display_price=m(s,n,o),i.min_price=i.display_price,i.max_price=i.display_price}return i}function m(t,e,r){const i=Number(t??0),s=Number(e??0);return s?r==="percent"?Math.max(0,Math.round(i*(100-s)/100)):Math.max(0,i-s):i}function q(t){if(t==null||t==="")return null;const e=Number(t);return Number.isFinite(e)?e:null}function z(t=[]){return[...t].sort((e,r)=>{const i=e.sort_order??Number(e.id??0),s=r.sort_order??Number(r.id??0);return i!==s?i-s:Number(e.id??0)-Number(r.id??0)})}function U(t){const e=((t==null?void 0:t.variant_attribute_values)??[]).map(r=>{var i;return r.attribute_value_id??((i=r.attribute_values)==null?void 0:i.id)}).filter(r=>r!=null);return{id:q(t.id),sku:t.sku??"",price:t.price??0,box_price:t.box_price??t.price??0,stock:t.stock??0,discount:t.discount??void 0,discount_type:t.discount_type??"percent",is_default:t.is_default??!1,sort_order:t.sort_order??null,attribute_values:e,attribute_values_name:[]}}function M(t){const e=new Map;for(const r of t){if(r.attribute_id==null)continue;const i=(r.attribute_values??[]).filter(n=>n!=null),s=e.get(r.attribute_id);if(!s){e.set(r.attribute_id,{id:r.id,attribute_id:r.attribute_id,use_in_product_page:r.use_in_product_page??!0,use_in_variant:r.use_in_variant??!1,attribute_values:[...i]});continue}s.attribute_values=[...new Set([...s.attribute_values??[],...i])],s.use_in_variant=s.use_in_variant||r.use_in_variant,s.use_in_product_page=s.use_in_product_page||r.use_in_product_page}return[...e.values()]}function B(t){const e=(t==null?void 0:t.variants)??[];return e.length>0?e.reduce((r,i)=>r+Number(i.stock??0),0):Number((t==null?void 0:t.count)??0)}function w(t){var i;if(!t)return t;const e=(((i=t.variants)==null?void 0:i.length)??0)>0||t.type==="variant",r={...t,type:e?"variant":"simple",product_attributes:M(t.product_attributes??[]),variants:z((t.variants??[]).map(U))};return r.count=B(r),r.is_exist=r.count>0,r}async function G(){const{data:t,error:e}=await l.from("attribute_values").select("id, attribute_id");if(e)throw e;return new Map((t??[]).map(r=>[r.id,r.attribute_id]))}async function j(t=[]){const{data:e,error:r}=await l.from("attributes").select("id, name");if(r)throw r;const i=new Map((e??[]).map(n=>[String(n.name).trim().toLowerCase(),n.id])),s=[];for(const n of t){if(n.attribute_id!=null){s.push(n);continue}const o=(n.attribute_name??"").trim();if(!o)continue;const d=o.toLowerCase();let a=i.get(d);if(a==null){const{data:u,error:c}=await l.from("attributes").insert({name:o}).select("id").single();if(c)throw c;a=u.id,i.set(d,a)}s.push({...n,attribute_id:a,is_new:!1})}return s}async function A(t,e){const{data:r,error:i}=await l.from("attribute_values").select("id, value").eq("attribute_id",t);if(i)throw i;const s=new Map((r??[]).map(o=>[o.value,o.id])),n=[];for(const o of e){if(o==null||o==="")continue;if(typeof o=="number"){n.push(o);continue}const d=String(o).trim();if(!d)continue;const a=s.get(d);if(a!=null){n.push(a);continue}const{data:u,error:c}=await l.from("attribute_values").insert({attribute_id:t,value:d}).select("id").single();if(c)throw c;s.set(d,u.id),n.push(u.id)}return[...new Set(n)]}async function X(t=[]){const e=[];for(const r of t){if(r.attribute_id==null){e.push(r);continue}const i=await A(r.attribute_id,r.attribute_values??[]);e.push({...r,attribute_values:i})}return e}async function Y(t=[],e=[]){const r=[];for(const i of t){const s=[];for(const n of i.attribute_values??[]){if(n==null||n==="")continue;if(typeof n=="number"){s.push(n);continue}const o=String(n).trim();if(!o)continue;const d=e.find(u=>(u.attribute_values??[]).some(c=>c===n||c===o));if(!(d!=null&&d.attribute_id))continue;const a=await A(d.attribute_id,[o]);s.push(...a)}r.push({...i,attribute_values:[...new Set(s)]})}return r}async function H(t,e=[],r=[]){const{error:i}=await l.from("product_attributes").delete().eq("product_id",t);if(i)throw i;const s=await G(),o=M(e).filter(a=>a.attribute_id!=null).map(a=>{let u=(a.attribute_values??[]).filter(c=>c!=null);if(a.use_in_variant){const c=new Set;r.forEach(_=>{(_.attribute_values??[]).forEach(p=>{const f=typeof p=="number"?p:p==null?void 0:p.id;f!=null&&s.get(f)===a.attribute_id&&c.add(f)})}),u=[...new Set([...u,...c])]}return{product_id:t,attribute_id:a.attribute_id,use_in_product_page:a.use_in_product_page??!0,use_in_variant:a.use_in_variant??!1,attribute_values:u}});if(!o.length)return;const{error:d}=await l.from("product_attributes").insert(o);if(d)throw d}function J(t,e,r,i,s,n){const o=b(e,n),d=Number(e.stock??0),a=e.discount!=null?Number(e.discount):null,u=e.discount_type??"percent",c=S(e,i,s),_=m(o,c.discount,c.discount_type);return{product_id:t,sku:e.sku??"",price:o,stock:d,discount:a,discount_type:a?u:null,is_default:e.is_default??!1,sort_order:r,display_price:_,is_exist:d>0,auto_calculate:!1,weight:0}}async function x(t,e){const{error:r}=await l.from("variant_attribute_values").delete().eq("variant_id",t);if(r)throw r;const i=(e.attribute_values??[]).map(n=>typeof n=="number"?n:n==null?void 0:n.id).filter(n=>n!=null);if(!i.length)return;const{error:s}=await l.from("variant_attribute_values").insert(i.map(n=>({variant_id:t,attribute_value_id:n})));if(s)throw s}async function K(t,e=[],r,i,s){const{data:n,error:o}=await l.from("variants").select("id").eq("product_id",t);if(o)throw o;const d=new Set((n??[]).map(c=>Number(c.id))),a=new Set;for(const[c,_]of e.entries()){const p=J(t,_,c,r,i,s),f=q(_.id);if(f!=null&&d.has(f)){const{error:y}=await l.from("variants").update(p).eq("id",f);if(y)throw y;a.add(f),await x(f,_);continue}const{data:T,error:h}=await l.from("variants").insert(p).select("id").single();if(h)throw h;const g=Number(T.id);a.add(g),await x(g,_)}const u=[...d].filter(c=>!a.has(c));if(u.length){const{error:c}=await l.from("variant_attribute_values").delete().in("variant_id",u);if(c)throw c;const{error:_}=await l.from("variants").delete().in("id",u);if(_)throw _}}async function I(t,e){const r=P(e),i=await j(e.product_attributes??[]),s=await X(i),n=await Y(e.variants??[],i),o=e.discount!=null?Number(e.discount):null,d=e.discount?e.discount_type??"percent":null,a=e.price!=null?Number(e.price):null;if(await H(t,s,n),r)await K(t,n,o,d,a);else{const{data:_}=await l.from("variants").select("id").eq("product_id",t),p=(_??[]).map(f=>f.id);p.length&&(await l.from("variant_attribute_values").delete().in("variant_id",p),await l.from("variants").delete().eq("product_id",t))}const u={type:r?"variant":"simple"};if(r){const _=k(n??[],o,d,a),p=(n??[]).map(f=>Number(f.stock??0));u.price=_.price,u.display_price=_.display_price,u.min_price=_.min_price,u.max_price=_.max_price,u.discount=_.discount,u.discount_type=_.discount_type,p.length&&(u.count=p.reduce((f,v)=>f+v,0),u.is_exist=p.some(f=>f>0))}else{const _=Number(e.price??0),p=e.discount!=null?Number(e.discount):null,f=e.discount_type??"percent";u.display_price=m(_,p,f),u.min_price=u.display_price,u.max_price=u.display_price}const{error:c}=await l.from("products").update(u).eq("id",t);if(c)throw c}async function Z(){const{data:t,error:e}=await l.from("products").select(N);if(e)throw e;return(t??[]).map(w)}async function D(t){const{data:e,error:r}=await l.from("products").select(N).eq("id",t).single();if(r)throw r;return w(e)}async function $(t){const e=E(t),{data:r,error:i}=await l.from("products").insert([e]).select("id").single();if(i)throw i;return await I(r.id,t),D(r.id)}async function tt(t,e){const r=E(e),{error:i}=await l.from("products").update(r).eq("id",t);if(i)throw i;return await I(String(t),e),D(t)}async function et(t){const e=String(t),{data:r,error:i}=await l.from("variants").select("id").eq("product_id",e);if(i)throw i;const s=(r??[]).map(o=>o.id);if(s.length){const{error:o}=await l.from("variant_attribute_values").delete().in("variant_id",s);if(o)throw o}await l.from("variants").delete().eq("product_id",e),await l.from("product_attributes").delete().eq("product_id",e);const{error:n}=await l.from("products").delete().eq("id",t);if(n)throw n}async function it(t){const{limit:e=20,page:r=1,search:i,filters:s}=t;let n=l.from("products").select("*",{count:"exact"});i!=null&&i.trim()&&(n=n.or(F(["title_fa","title","code","sku","description"],i.trim()))),n=O(n,s,new Set([...V,"id","created_at","updated_at"])),n=R(n,t,"-id",["id","title_fa","title","code","price","count","created_at","updated_at"]),n=L(n,r,e);const{data:o,error:d,count:a}=await n;if(d)throw d;return C(o,a,t,w)}export{$ as a,D as b,Z as c,et as d,it as g,tt as u};
|