@ppg_pl/tinting 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,10 +43,21 @@ export const fetchColors = async (filters) => {
43
43
  return [];
44
44
  }
45
45
  };
46
+ const getSampleSortForProduct = (sample, productId) => {
47
+ var _a, _b;
48
+ const link = (_a = sample === null || sample === void 0 ? void 0 : sample.Products) === null || _a === void 0 ? void 0 : _a.find((p) => p.Product_id === productId);
49
+ // put null/undefined at the end
50
+ return (_b = link === null || link === void 0 ? void 0 : link.sort) !== null && _b !== void 0 ? _b : Number.POSITIVE_INFINITY;
51
+ };
46
52
  export const fetchSamplesColors = async (filters) => {
47
53
  try {
54
+ // you already include Products.* in the query
55
+ const { id: productId } = filters;
48
56
  const response = await ApiService.getData(`items/Sample?${fetchColorsQuery(Object.assign({}, filters))}`);
49
- return (response === null || response === void 0 ? void 0 : response.data) || [];
57
+ const data = (response === null || response === void 0 ? void 0 : response.data) || [];
58
+ // order by junction sort
59
+ const ordered = [...data].sort((a, b) => getSampleSortForProduct(a, productId) - getSampleSortForProduct(b, productId));
60
+ return ordered;
50
61
  }
51
62
  catch (error) {
52
63
  console.error('Error fetching samples colors:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/components/api/services.ts"],"names":[],"mappings":"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","sourcesContent":["import qs from 'qs';\nimport { ApiService } from '.';\nimport { ProductShopRelation } from '../../types';\n\nexport const limit = 200;\n\nexport const fetchColorsQuery = (filters: Record<string, any>) => {\n const { sortByHex, ...restFilters } = filters;\n\n return qs.stringify(\n {\n fields: ['*', 'Products.*', 'Samples.*'].join(','),\n filter: {\n _and: [\n ...(restFilters.id ? [{ Products: { Product_id: { _eq: restFilters.id } } }] : []),\n ...(restFilters.sampleId ? [{ Samples: { Sample_id: { _eq: restFilters.sampleId } } }] : []),\n ...(restFilters.colorNumber ? [{ number: { _contains: restFilters.colorNumber } }] : []),\n ...(restFilters.colorName ? [{ name: { _icontains: restFilters.colorName } }] : []),\n ...(restFilters.colorFamily ? [{ colorFamily: { _eq: restFilters.colorFamily } }] : []),\n ],\n },\n sort: sortByHex === 'desc' ? '-hex' : sortByHex === 'asc' ? 'hex' : undefined,\n meta: '*',\n page: restFilters.page !== undefined ? restFilters.page : 1,\n limit: restFilters.colorName ? 200 : limit,\n },\n { encodeValuesOnly: true },\n );\n};\n\nexport const fetchColors = async (filters: Record<string, any>) => {\n try {\n const query = fetchColorsQuery({ ...filters, sortByHex: 'desc' });\n const response = await ApiService.getData(`items/Color?${query}`);\n return response?.data || [];\n } catch (error) {\n console.error('Error fetching colors:', error);\n return [];\n }\n};\n\nexport const fetchSamplesColors = async (filters: Record<string, any>) => {\n try {\n const response = await ApiService.getData(`items/Sample?${fetchColorsQuery({ ...filters })}`);\n return response?.data || [];\n } catch (error) {\n console.error('Error fetching samples colors:', error);\n return [];\n }\n};\n\nexport const fetchProductData = async (filters: Record<string, any>) => {\n try {\n // Fetch shop details\n const shopResponse = await ApiService.getData(`items/Shop?filter[name][_eq]=${filters.shopName}`);\n const shop = shopResponse?.data?.[0];\n\n if (!shop?.id) {\n console.error('Shop not found');\n return null;\n }\n\n // Fetch product details\n const response = await ApiService.getData(`items/Product?filter[name][_eq]=${filters.productName}&fields=*,images.*,Shop.*,Category.*.*.*.*`);\n const product = response?.data?.[0];\n\n // fetch product samples\n const productSamples = await fetchSamplesColors({ id: product.id, page: 0 });\n\n if (product && product.Shop.some((s: ProductShopRelation) => s.Shop_id === shop.id)) {\n return { ...product, id: product.id, productSamples };\n }\n\n console.error('Product not found or does not belong to the shop');\n return null;\n } catch (error) {\n console.error('Error fetching product data:', error);\n return null;\n }\n};\n\nexport const fetchColorFamilies = async () => {\n try {\n const response = await ApiService.getData(`fields/Color/colorFamily`);\n\n return response?.data?.meta?.options?.choices || [];\n } catch (error) {\n console.error('Error fetching color families:', error);\n return [];\n }\n};\n\nexport const updateFilters = (filters: Record<string, any>, newFilter: Record<string, any>) => {\n return { ...filters, ...newFilter };\n};\n"]}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/components/api/services.ts"],"names":[],"mappings":"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","sourcesContent":["import qs from 'qs';\nimport { ApiService } from '.';\nimport { ProductShopRelation } from '../../types';\n\nexport const limit = 200;\n\nexport const fetchColorsQuery = (filters: Record<string, any>) => {\n const { sortByHex, ...restFilters } = filters;\n\n return qs.stringify(\n {\n fields: ['*', 'Products.*', 'Samples.*'].join(','),\n filter: {\n _and: [\n ...(restFilters.id ? [{ Products: { Product_id: { _eq: restFilters.id } } }] : []),\n ...(restFilters.sampleId ? [{ Samples: { Sample_id: { _eq: restFilters.sampleId } } }] : []),\n ...(restFilters.colorNumber ? [{ number: { _contains: restFilters.colorNumber } }] : []),\n ...(restFilters.colorName ? [{ name: { _icontains: restFilters.colorName } }] : []),\n ...(restFilters.colorFamily ? [{ colorFamily: { _eq: restFilters.colorFamily } }] : []),\n ],\n },\n sort: sortByHex === 'desc' ? '-hex' : sortByHex === 'asc' ? 'hex' : undefined,\n meta: '*',\n page: restFilters.page !== undefined ? restFilters.page : 1,\n limit: restFilters.colorName ? 200 : limit,\n },\n { encodeValuesOnly: true },\n );\n};\n\nexport const fetchColors = async (filters: Record<string, any>) => {\n try {\n const query = fetchColorsQuery({ ...filters, sortByHex: 'desc' });\n const response = await ApiService.getData(`items/Color?${query}`);\n return response?.data || [];\n } catch (error) {\n console.error('Error fetching colors:', error);\n return [];\n }\n};\n\nconst getSampleSortForProduct = (sample: any, productId: number) => {\n const link = sample?.Products?.find((p: any) => p.Product_id === productId);\n // put null/undefined at the end\n return link?.sort ?? Number.POSITIVE_INFINITY;\n};\n\nexport const fetchSamplesColors = async (filters: Record<string, any>) => {\n try {\n // you already include Products.* in the query\n const { id: productId } = filters;\n const response = await ApiService.getData(`items/Sample?${fetchColorsQuery({ ...filters })}`);\n const data = response?.data || [];\n\n // order by junction sort\n const ordered = [...data].sort((a, b) => getSampleSortForProduct(a, productId) - getSampleSortForProduct(b, productId));\n\n return ordered;\n } catch (error) {\n console.error('Error fetching samples colors:', error);\n return [];\n }\n};\n\nexport const fetchProductData = async (filters: Record<string, any>) => {\n try {\n // Fetch shop details\n const shopResponse = await ApiService.getData(`items/Shop?filter[name][_eq]=${filters.shopName}`);\n const shop = shopResponse?.data?.[0];\n\n if (!shop?.id) {\n console.error('Shop not found');\n return null;\n }\n\n // Fetch product details\n const response = await ApiService.getData(`items/Product?filter[name][_eq]=${filters.productName}&fields=*,images.*,Shop.*,Category.*.*.*.*`);\n const product = response?.data?.[0];\n\n // fetch product samples\n const productSamples = await fetchSamplesColors({ id: product.id, page: 0 });\n\n if (product && product.Shop.some((s: ProductShopRelation) => s.Shop_id === shop.id)) {\n return { ...product, id: product.id, productSamples };\n }\n\n console.error('Product not found or does not belong to the shop');\n return null;\n } catch (error) {\n console.error('Error fetching product data:', error);\n return null;\n }\n};\n\nexport const fetchColorFamilies = async () => {\n try {\n const response = await ApiService.getData(`fields/Color/colorFamily`);\n\n return response?.data?.meta?.options?.choices || [];\n } catch (error) {\n console.error('Error fetching color families:', error);\n return [];\n }\n};\n\nexport const updateFilters = (filters: Record<string, any>, newFilter: Record<string, any>) => {\n return { ...filters, ...newFilter };\n};\n"]}
@@ -2545,10 +2545,21 @@ const fetchColors = async (filters) => {
2545
2545
  return [];
2546
2546
  }
2547
2547
  };
2548
+ const getSampleSortForProduct = (sample, productId) => {
2549
+ var _a, _b;
2550
+ const link = (_a = sample === null || sample === void 0 ? void 0 : sample.Products) === null || _a === void 0 ? void 0 : _a.find((p) => p.Product_id === productId);
2551
+ // put null/undefined at the end
2552
+ return (_b = link === null || link === void 0 ? void 0 : link.sort) !== null && _b !== void 0 ? _b : Number.POSITIVE_INFINITY;
2553
+ };
2548
2554
  const fetchSamplesColors = async (filters) => {
2549
2555
  try {
2556
+ // you already include Products.* in the query
2557
+ const { id: productId } = filters;
2550
2558
  const response = await ApiService.getData(`items/Sample?${fetchColorsQuery(Object.assign({}, filters))}`);
2551
- return (response === null || response === void 0 ? void 0 : response.data) || [];
2559
+ const data = (response === null || response === void 0 ? void 0 : response.data) || [];
2560
+ // order by junction sort
2561
+ const ordered = [...data].sort((a, b) => getSampleSortForProduct(a, productId) - getSampleSortForProduct(b, productId));
2562
+ return ordered;
2552
2563
  }
2553
2564
  catch (error) {
2554
2565
  console.error('Error fetching samples colors:', error);