Files
machartaa_admin_dist/dist/assets/products-d65212ac.js
T
2026-06-22 18:38:35 +03:30

2 lines
11 KiB
JavaScript

import{X as d}from"./index-09a3e4bf.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(o=>b(o,i)),n=s.length?Math.min(...s):0,a=s.length?Math.max(...s):0;if((e??0)>0){const o=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:o.length?Math.min(...o):n,min_price:u.length?Math.min(...u):n,max_price:u.length?Math.max(...u):a,discount:e??null,discount_type:r??"percent"}}return{price:n,display_price:n,min_price:n,max_price:a,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,a=t.discount?t.discount_type??"percent":null,l=t.price!=null?Number(t.price):null,o=k(s,n,a,l),u=s.map(c=>Number(c.stock??0));i.price=o.price,i.discount=o.discount,i.discount_type=o.discount_type,i.count=u.reduce((c,_)=>c+_,0),i.display_price=o.display_price,i.min_price=o.min_price,i.max_price=o.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,a=t.discount_type??"percent";i.price=s,i.display_price=m(s,n,a),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||(t==null?void 0:t.type)==="variant"?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 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 j(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])),s=[];for(const n of t){if(n.attribute_id!=null){s.push(n);continue}const a=(n.attribute_name??"").trim();if(!a)continue;const l=a.toLowerCase();let o=i.get(l);if(o==null){const{data:u,error:c}=await d.from("attributes").insert({name:a}).select("id").single();if(c)throw c;o=u.id,i.set(l,o)}s.push({...n,attribute_id:o,is_new:!1})}return s}async function A(t,e){const{data:r,error:i}=await d.from("attribute_values").select("id, value").eq("attribute_id",t);if(i)throw i;const s=new Map((r??[]).map(a=>[a.value,a.id])),n=[];for(const a of e){if(a==null||a==="")continue;if(typeof a=="number"){n.push(a);continue}const l=String(a).trim();if(!l)continue;const o=s.get(l);if(o!=null){n.push(o);continue}const{data:u,error:c}=await d.from("attribute_values").insert({attribute_id:t,value:l}).select("id").single();if(c)throw c;s.set(l,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 a=String(n).trim();if(!a)continue;const l=e.find(u=>(u.attribute_values??[]).some(c=>c===n||c===a));if(!(l!=null&&l.attribute_id))continue;const o=await A(l.attribute_id,[a]);s.push(...o)}r.push({...i,attribute_values:[...new Set(s)]})}return r}async function H(t,e=[],r=[]){const{error:i}=await d.from("product_attributes").delete().eq("product_id",t);if(i)throw i;const s=await G(),a=M(e).filter(o=>o.attribute_id!=null).map(o=>{let u=(o.attribute_values??[]).filter(c=>c!=null);if(o.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)===o.attribute_id&&c.add(f)})}),u=[...new Set([...u,...c])]}return{product_id:t,attribute_id:o.attribute_id,use_in_product_page:o.use_in_product_page??!0,use_in_variant:o.use_in_variant??!1,attribute_values:u}});if(!a.length)return;const{error:l}=await d.from("product_attributes").insert(a);if(l)throw l}function J(t,e,r,i,s,n){const a=b(e,n),l=Number(e.stock??0),o=e.discount!=null?Number(e.discount):null,u=e.discount_type??"percent",c=S(e,i,s),_=m(a,c.discount,c.discount_type);return{product_id:t,sku:e.sku??"",price:a,stock:l,discount:o,discount_type:o?u:null,is_default:e.is_default??!1,sort_order:r,display_price:_,is_exist:l>0,auto_calculate:!1,weight:0}}async function x(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:s}=await d.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:a}=await d.from("variants").select("id").eq("product_id",t);if(a)throw a;const l=new Set((n??[]).map(c=>Number(c.id))),o=new Set;for(const[c,_]of e.entries()){const p=J(t,_,c,r,i,s),f=q(_.id);if(f!=null&&l.has(f)){const{error:y}=await d.from("variants").update(p).eq("id",f);if(y)throw y;o.add(f),await x(f,_);continue}const{data:T,error:h}=await d.from("variants").insert(p).select("id").single();if(h)throw h;const g=Number(T.id);o.add(g),await x(g,_)}const u=[...l].filter(c=>!o.has(c));if(u.length){const{error:c}=await d.from("variant_attribute_values").delete().in("variant_id",u);if(c)throw c;const{error:_}=await d.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),a=e.discount!=null?Number(e.discount):null,l=e.discount?e.discount_type??"percent":null,o=e.price!=null?Number(e.price):null;if(await H(t,s,n),r)await K(t,n,a,l,o);else{const{data:_}=await d.from("variants").select("id").eq("product_id",t),p=(_??[]).map(f=>f.id);p.length&&(await d.from("variant_attribute_values").delete().in("variant_id",p),await d.from("variants").delete().eq("product_id",t))}const u={type:r?"variant":"simple"};if(r){const _=k(n??[],a,l,o),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 d.from("products").update(u).eq("id",t);if(c)throw c}async function Z(){const{data:t,error:e}=await d.from("products").select(N);if(e)throw e;return(t??[]).map(w)}async function D(t){const{data:e,error:r}=await d.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 d.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 d.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 d.from("variants").select("id").eq("product_id",e);if(i)throw i;const s=(r??[]).map(a=>a.id);if(s.length){const{error:a}=await d.from("variant_attribute_values").delete().in("variant_id",s);if(a)throw a}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 it(t){const{limit:e=20,page:r=1,search:i,filters:s}=t;let n=d.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:a,error:l,count:o}=await n;if(l)throw l;return C(a,o,t,w)}export{$ as a,D as b,Z as c,et as d,it as g,tt as u};