2 lines
9.1 KiB
JavaScript
2 lines
9.1 KiB
JavaScript
import{ab as d,_ as N}from"./index-ec71f3f7.js";const b="*, product_attributes(*, attributes(*)), variants(*, variant_attribute_values(*))",k=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"]);function g(t){var e;return(((e=t.variants)==null?void 0:e.length)??0)>0||t.type==="variant"}function y(t){const e=g(t),r=new Set(["discount","discount_type","count","display_price","min_price","max_price","price"]),i={};for(const[a,n]of Object.entries(t))!k.has(a)||n===void 0||e&&r.has(a)||(i[a]=n);if(i.type=e?"variant":"simple",e){const a=t.variants??[],n=a.map(o=>m(o.price,o.discount,o.discount_type)),s=a.map(o=>Number(o.stock??0));i.price=0,i.discount=null,i.discount_type=null,i.count=s.reduce((o,u)=>o+u,0),i.display_price=n.length?Math.min(...n):0,i.min_price=n.length?Math.min(...n):0,i.max_price=n.length?Math.max(...n):0,i.is_exist=s.length?s.some(o=>o>0):t.is_exist??!0}else{const a=Number(t.price??0),n=t.discount!=null?Number(t.discount):null,s=t.discount_type??"percent";i.price=a,i.display_price=m(a,n,s),i.min_price=i.display_price,i.max_price=i.display_price}return i}function m(t,e,r){const i=Number(t??0),a=Number(e??0);return a?r==="percent"?Math.max(0,Math.round(i*(100-a)/100)):Math.max(0,i-a):i}function V(t){if(t==null||t==="")return null;const e=Number(t);return Number.isFinite(e)?e:null}function q(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:V(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,attribute_values:e,attribute_values_name:[]}}function x(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),a=e.get(r.attribute_id);if(!a){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}a.attribute_values=[...new Set([...a.attribute_values??[],...i])],a.use_in_variant=a.use_in_variant||r.use_in_variant,a.use_in_product_page=a.use_in_product_page||r.use_in_product_page}return[...e.values()]}function w(t){var r;if(!t)return t;const e=(((r=t.variants)==null?void 0:r.length)??0)>0||t.type==="variant";return{...t,type:e?"variant":"simple",product_attributes:x(t.product_attributes??[]),variants:(t.variants??[]).map(q)}}async function A(){const{data:t,error:e}=await d.from("attribute_values").select("id, attribute_id");if(e)throw e;return new Map((t??[]).map(r=>[r.id,r.attribute_id]))}async function M(t=[]){const{data:e,error:r}=await d.from("attributes").select("id, name");if(r)throw r;const i=new Map((e??[]).map(n=>[String(n.name).trim().toLowerCase(),n.id])),a=[];for(const n of t){if(n.attribute_id!=null){a.push(n);continue}const s=(n.attribute_name??"").trim();if(!s)continue;const o=s.toLowerCase();let u=i.get(o);if(u==null){const{data:l,error:c}=await d.from("attributes").insert({name:s}).select("id").single();if(c)throw c;u=l.id,i.set(o,u)}a.push({...n,attribute_id:u,is_new:!1})}return a}async function E(t,e){const{data:r,error:i}=await d.from("attribute_values").select("id, value").eq("attribute_id",t);if(i)throw i;const a=new Map((r??[]).map(s=>[s.value,s.id])),n=[];for(const s of e){if(s==null||s==="")continue;if(typeof s=="number"){n.push(s);continue}const o=String(s).trim();if(!o)continue;const u=a.get(o);if(u!=null){n.push(u);continue}const{data:l,error:c}=await d.from("attribute_values").insert({attribute_id:t,value:o}).select("id").single();if(c)throw c;a.set(o,l.id),n.push(l.id)}return[...new Set(n)]}async function T(t=[]){const e=[];for(const r of t){if(r.attribute_id==null){e.push(r);continue}const i=await E(r.attribute_id,r.attribute_values??[]);e.push({...r,attribute_values:i})}return e}async function I(t=[],e=[]){const r=[];for(const i of t){const a=[];for(const n of i.attribute_values??[]){if(n==null||n==="")continue;if(typeof n=="number"){a.push(n);continue}const s=String(n).trim();if(!s)continue;const o=e.find(l=>(l.attribute_values??[]).some(c=>c===n||c===s));if(!(o!=null&&o.attribute_id))continue;const u=await E(o.attribute_id,[s]);a.push(...u)}r.push({...i,attribute_values:[...new Set(a)]})}return r}async function D(t,e=[],r=[]){const{error:i}=await d.from("product_attributes").delete().eq("product_id",t);if(i)throw i;const a=await A(),s=x(e).filter(u=>u.attribute_id!=null).map(u=>{let l=(u.attribute_values??[]).filter(c=>c!=null);if(u.use_in_variant){const c=new Set;r.forEach(f=>{(f.attribute_values??[]).forEach(_=>{const p=typeof _=="number"?_:_==null?void 0:_.id;p!=null&&a.get(p)===u.attribute_id&&c.add(p)})}),l=[...new Set([...l,...c])]}return{product_id:t,attribute_id:u.attribute_id,use_in_product_page:u.use_in_product_page??!0,use_in_variant:u.use_in_variant??!1,attribute_values:l}});if(!s.length)return;const{error:o}=await d.from("product_attributes").insert(s);if(o)throw o}function R(t,e){const r=Number(e.price??0),i=Number(e.stock??0),a=e.discount!=null?Number(e.discount):null,n=e.discount_type??"percent",s=m(r,a,n);return{product_id:t,sku:e.sku??"",price:r,stock:i,discount:a,discount_type:a?n:null,is_default:e.is_default??!1,display_price:s,is_exist:i>0,auto_calculate:!1,weight:0}}async function v(t,e){const{error:r}=await d.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:a}=await d.from("variant_attribute_values").insert(i.map(n=>({variant_id:t,attribute_value_id:n})));if(a)throw a}async function L(t,e=[]){const{data:r,error:i}=await d.from("variants").select("id").eq("product_id",t);if(i)throw i;const a=new Set((r??[]).map(o=>Number(o.id))),n=new Set;for(const o of e){const u=R(t,o),l=V(o.id);if(l!=null&&a.has(l)){const{error:h}=await d.from("variants").update(u).eq("id",l);if(h)throw h;n.add(l),await v(l,o);continue}const{data:f,error:_}=await d.from("variants").insert(u).select("id").single();if(_)throw _;const p=Number(f.id);n.add(p),await v(p,o)}const s=[...a].filter(o=>!n.has(o));if(s.length){const{error:o}=await d.from("variant_attribute_values").delete().in("variant_id",s);if(o)throw o;const{error:u}=await d.from("variants").delete().in("id",s);if(u)throw u}}async function P(t,e){const r=g(e),i=await M(e.product_attributes??[]),a=await T(i),n=await I(e.variants??[],i);if(await D(t,a,n),r)await L(t,n);else{const{data:u}=await d.from("variants").select("id").eq("product_id",t),l=(u??[]).map(c=>c.id);l.length&&(await d.from("variant_attribute_values").delete().in("variant_id",l),await d.from("variants").delete().eq("product_id",t))}const s={type:r?"variant":"simple"};if(r){const u=(n??[]).map(c=>m(c.price,c.discount,c.discount_type)),l=(n??[]).map(c=>Number(c.stock??0));u.length&&(s.min_price=Math.min(...u),s.max_price=Math.max(...u),s.display_price=Math.min(...u),s.price=0,s.discount=null,s.discount_type=null),l.length&&(s.count=l.reduce((c,f)=>c+f,0),s.is_exist=l.some(c=>c>0))}else{const u=Number(e.price??0),l=e.discount!=null?Number(e.discount):null,c=e.discount_type??"percent";s.display_price=m(u,l,c),s.min_price=s.display_price,s.max_price=s.display_price}const{error:o}=await d.from("products").update(s).eq("id",t);if(o)throw o}async function F(){const{data:t,error:e}=await d.from("products").select(b);if(e)throw e;return(t??[]).map(w)}async function S(t){const{data:e,error:r}=await d.from("products").select(b).eq("id",t).single();if(r)throw r;return w(e)}async function O(t){const e=y(t),{data:r,error:i}=await d.from("products").insert([e]).select("id").single();if(i)throw i;return await P(r.id,t),S(r.id)}async function C(t,e){const r=y(e),{error:i}=await d.from("products").update(r).eq("id",t);if(i)throw i;return await P(String(t),e),S(t)}async function U(t){const e=String(t),{data:r,error:i}=await d.from("variants").select("id").eq("product_id",e);if(i)throw i;const a=(r??[]).map(s=>s.id);if(a.length){const{error:s}=await d.from("variant_attribute_values").delete().in("variant_id",a);if(s)throw s}await d.from("variants").delete().eq("product_id",e),await d.from("product_attributes").delete().eq("product_id",e);const{error:n}=await d.from("products").delete().eq("id",t);if(n)throw n}async function j(t){const{TableEngineShopRequest:e}=await N(()=>import("./buildSupabaseQuery-d2c8ff03.js"),["assets/buildSupabaseQuery-d2c8ff03.js","assets/index-ec71f3f7.js","assets/index-f5b104f4.css"]),r={...t,select:[b]};!r.sort&&!r.order&&(r.order="-id");const i=await e(r,"products");try{if(Array.isArray(i==null?void 0:i.rows)){const a=i.rows.map(n=>w({id:n.id,created_at:n.created_at??"",updated_at:n.updated_at??"",...n}));return{...i,rows:a}}}catch(a){console.log("[getProductsTable] normalize error:",a)}return i}export{O as a,S as b,F as c,U as d,j as g,C as u};
|