PageSourceSearch

https://www.childfund.org/scripts/B1VVPlug-giftListing.js

js childfund.org collected 2026-10-02 06:07:20 UTC 15,525 bytes, 102 lines download raw bytes

1import{j as u}from"./D_zvdyIk-jsx-runtime.js";import{r as g}from"./DEmwW7Sr-index.js";import{H as fe,i as ge}from"./CYCalsW9-_handlebarsPluginInit.js";import{L as pe}from"./byCXDQjA-loaderChildfund.js";import{N as he}from"./B9_7I65e-noResults.js";import{P as Ce}from"./Cuq1KlWm-index.js";import{B as ye}from"./ByyoQ2VQ-basketButton.js";import{e as re,F as Pe,S as Fe}from"./B6BDgmPh-facets.js";import{S as Ie}from"./C9HO5dcD-selectDropdown.js";import{G,Q as oe,a as Y,b as f}from"./COQi2LKW-queryParams.js";import{g as me,a as le}from"./CWAYQl5M-apollo-client.js";import{u as ue}from"./BhePGCGM-useQuery.js";import"./-mcz9By9-verndale-core.js";import"./Dqp8F04z-rtf.js";import"./CBDLwlLx-svg.js";import"./DbvFWwTa-cart-storage.js";import"./SMGOslcl-page-context.js";import"./4vOobgOV-toast.js";import"./D3vVK4lU-index.esm.js";import"./u_rCeLVl-index.js";ge();var Te=fe.template({0:function(a,t,y,A,e){var c,n=a.lookupProperty||function(p,I){if(Object.prototype.hasOwnProperty.call(p,I))return p[I]};return a.escapeExpression((c=(c=n(y,"className")||(t!=null?n(t,"className"):t))!=null?c:a.hooks.helperMissing,typeof c=="function"?c.call(t??(a.nullContext||{}),{name:"className",hash:{},data:e,loc:{start:{line:11,column:44}
1,end:{line:11,column:57}}}):c))},compiler:[8,">= 4.3.0"],main:function(a,t,y,A,e){var c,n,p=t??(a.nullContext||{}),I=a.hooks.helperMissing,O="function",x=a.escapeExpression,d=a.lookupProperty||function(T,h){if(Object.prototype.hasOwnProperty.call(T,h))return T[h]};return'<article class="honor-card '+((c=d(y,"if").call(p,t!=null?d(t,"className"):t,{name:"if",hash:{},fn:a.program(0,e,0),inverse:a.noop,data:e,loc:{start:{line:11,column:27},end:{line:11,column:64}}}))!=null?c:"")+`">
2  <h3 class="honor-card__header heading-5">`+x((n=(n=d(y,"header")||(t!=null?d(t,"header"):t))!=null?n:I,typeof n===O?n.call(p,{name:"header",hash:{},data:e,loc:{start:{line:12,column:43},end:{line:12,column:53}}}):n))+`</h3>
3  <p class="honor-card__description copy-large">`+x((n=(n=d(y,"description")||(t!=null?d(t,"description"):t))!=null?n:I,typeof n===O?n.call(p,{name:"description",hash:{},data:e,loc:{start:{line:13,column:48},end:{line:13,column:63}}}):n))+`</p>
4
5`+((c=a.invokePartial(d(A,"button"),t,{name:"button",hash:{icon:"chevron-right",className:"honor-card__cta",target:"_blank",label:t!=null?d(t,"linkLabel"):t,variant:"primary",href:t!=null?d(t,"linkHref"):t,type:"link"},data:e,indent:"  ",helpers:y,partials:A,decorators:a.decorators}))!=null?c:"")+`</article>
6
7`},usePartial:!0,useData:!0});function de(a,t){return Te({...a,publicPath:"",docsView:t.viewMode==="docs"},t)}const Se=({code:a,title:t,displayPrice:y,image:A,basketButtonLabel:e,basketButtonAddedLabel:c,cartEndpoint:n,price:p,Url:I,itemCategory:O,itemCategory2:x,itemCategory3:d,itemVariant:T,marketingId:h,donationType:m})=>{const _=()=>{if(!A)return null;const{filePath:E,width:P,height:R,description:N}=A;return u.jsx("div",{className:"gift-card__image",children:u.jsxs("picture",{className:"picture gift-card__picture",children:[u.jsx("source",{srcSet:`${E}?w=${P}&h=${R}&format=webp 1x, ${E}?w=${P*2}&h=${R*2}&format=webp 2x`,type:"image/webp"}),u.jsx("img",{src:`${E}?w=${P}&h=${R}`,srcSet:`${E}?w=${P}&h=${R} 1x, ${E}?w=${P*2}&h=${R*2} 2x`,width:P,height:R,alt:N,loading:"lazy"})]})})};return u.jsxs("a",{href:I,className:"gift-card","aria-labelledby":`gift-card-title-${a}`,children:[_(),u.jsxs("div",{className:"gift-card__content",children:[u.jsxs("div",{className:"gift-card__header",children:[u.jsx("h3",{className:"gift-card__title heading-5",id:`gift-card-title-${a}`,children:t}),u.jsx("p",{className:"gift-card__price copy-large",children:y})]}),u.jsx(ye,{code:a,quantity:1,variant:"secondary",label:e,addedLabel:c,cartEndpoint:n,requestFrom:"gift-card",title:t,price:p,productType:"gift",itemCategory:O,itemCategory2:x,itemCategory3:d,itemVariant:T,marketingId:h,donationType:m,className:"gift-card__button"})]})]})},Ae=a=>a.replace(/\.00$/,""),_e=({items:a,basketButtonLabel:t,basketButtonAddedLabel:y,cartEndpoint:A})=>u.jsx("div",{className:"gift-listing__cards",children:a.map(e=>{const c=e?.PricePerMarket?.[0]?.Price||0,n=e?.FormattedPrice||`$${c.toFixed(2)}`,p=Ae(n);return u.jsx(Se,{Url:e?.Url||"#",code:e?.Code||"",title:e?.ContentName||"",displayPrice:p,image:e?.FeaturedImageUrl?{filePath:e.FeaturedImageUrl,width:500,height:412,description:e?.Description||""}:void 0,basketButtonLabel:t,basketButtonAddedLabel:y,cartEndpoint:A,price:c,itemCategory:e?.category1||void 0,itemCategory2:e?.category2||void 0,itemCategory3:e?.category3||void 0,itemVariant:e?.itemVariant||void 0,marketingId:e?.marketingId||e?.campaignId||void 0,donationType:e?.donationType||void 0},e?.Code||"")})}),Ee=me`
8  query GetAllGiftListingFacets($suppressedFacet: [String!]) {
9    GenericVariant(
10      where: {
11        CategoriesCategoryFacet: { Title: { notIn: $suppressedFacet } }
12        CountryCategoryFacet: { Title: { notIn: $suppressedFacet } }
13        PriceCategoryFacet: { Title: { notIn: $suppressedFacet } }
14      }
15    ) {
16      facets {
17        CategoriesCategoryFacet {
18          Title(limit: 100) {
19            name
20            count
21          }
22        }
23        CountryCategoryFacet {
24          Title(limit: 100) {
25            name
26            count
27          }
28        }
29        PriceCategoryFacet {
30          Title(limit: 100) {
31            name
32            count
33          }
34        }
35      }
36    }
37  }
38`,Re=me`
39  query GetGiftPagesAndFacets(
40    $searchTerm: String
41    $areasOfImpactFacetTerms: [String!]
42    $countryFacetTerms: [String!]
43    $priceFacetTerms: [String!]
44    $skip: Int
45    $limit: Int
46    $orderBy: GenericVariantOrderByInput
47    $suppressedFacet: [String!]
48  ) {
49    GenericVariant(
50      orderBy: $orderBy
51      skip: $skip
52      limit: $limit
53      where: {
54        CategoriesCategoryFacet: { Title: { notIn: $suppressedFacet } }
55        CountryCategoryFacet: { Title: { notIn: $suppressedFacet } }
56        PriceCategoryFacet: { Title: { notIn: $suppressedFacet } }
57        _or: [
58          { _fulltext: { match: $searchTerm, fuzzy: true } }
59          { ContentName: { like: $searchTerm, boost: 10, fuzzy: true } }
60          { Description: { match: $searchTerm, boost: 5, fuzzy: true } }
61          { FilterCategoriesText: { match: $searchTerm, boost: 5, fuzzy: true } }
62        ]
63      }
64    ) {
65      facets {
66        CategoriesCategoryFacet {
67          Title(filters: $areasOfImpactFacetTerms, orderType: VALUE, orderBy: ASC, limit: 100) {
68            name
69            count
70          }
71        }
72        CountryCategoryFacet {
73          Title(filters: $countryFacetTerms, orderType: VALUE, orderBy: ASC, limit: 100) {
74            name
75            count
76          }
77        }
78        PriceCategoryFacet {
79          Title(filters: $priceFacetTerms, limit: 100) {
80            name
81            count
82          }
83        }
84      }
85      total
86      items {
87        FeaturedImageUrl
88        Description
89        Code
90        ContentName
91        FormattedPrice
92        PricePerMarket {
93          Price
94        }
95        Url
96        # TODO: Add item-level analytics fields once backend exposes them in GraphQL schema:
97        # category1, category2, category3, itemVariant, marketingId, donationType
98      }
99    }
100  }
101`,Oe=a=>
101a?Object.values(G).includes(a):!1,xe=()=>{const[a,t]=g.useState(1),[y,A]=g.useState(""),[e,c]=g.useState([]),[n,p]=g.useState([]),[I,O]=g.useState([]),[x,d]=g.useState([]),[T,h]=g.useState(G.POPULARITY);return g.useEffect(()=>{const m=new oe,_=m.getParam(Y.PAGE),E=_?parseInt(_,10):1,P=m.getParam(Y.SEARCH);A(P||"");const R=m.getArrayParam(f.AREAS_OF_IMPACT);c(R);const N=m.getArrayParam(f.COUNTRIES);p(N);const j=m.getArrayParam(f.PRICE_RANGES);O(j);const v=m.getParam(f.SORT);Oe(v)&&h(v),t(E)},[]),g.useEffect(()=>{const m=new oe(!0);m.setParam(Y.PAGE,a>1?a.toString():""),m.setParam(Y.SEARCH,y),m.setParam(f.AREAS_OF_IMPACT,e),m.setParam(f.COUNTRIES,n),m.setParam(f.PRICE_RANGES,I),m.setParam(f.SORT,T!==G.POPULARITY?T:""),m.updateQueryParams()},[a,y,e,n,I,T]),{currentPage:a,searchTerm:y,areasOfImpactFacetIds:e,countryFacetIds:n,priceFacetIds:I,facets:x,sortBy:T,setCurrentPage:t,setSearchTerm:A,setAreasOfImpactFacetIds:c,setCountryFacetIds:p,setPriceFacetIds:O,setFacets:d,setSortBy:h}},q=12,$={AREAS_OF_IMPACT:"areas-of-impact",COUNTRIES:"countries",PRICE_RANGES:"price-ranges"},Ne=a=>{switch(a){case G.PRICE_LOW:return{DefaultPrice:"ASC"};case G.PRICE_HIGH:return{DefaultPrice:"DESC"};case G.POPULARITY:default:return{_ranking:"RELEVANCE"}}},be=(a={})=>{const{areasOfImpactFacetTitle:t="Areas of Impact",countriesFacetTitle:y="Countries",priceRangesFacetTitle:A="Price Ranges",suppressedFacets:e=[],suppresedFacetGroups:c=[],priceTagsSort:n=[]}=a,{currentPage:p,setCurrentPage:I,searchTerm:O,setSearchTerm:x,areasOfImpactFacetIds:d,setAreasOfImpactFacetIds:T,countryFacetIds:h,setCountryFacetIds:m,priceFacetIds:_,setPriceFacetIds:E,facets:P,setFacets:R,sortBy:N,setSortBy:j}=xe(),v=g.useMemo(()=>Ne(N),[N]),[U,V]=g.useState(!1),B=c.join(",");g.useEffect(()=>{const i=B?B.split(","):[];i.includes($.AREAS_OF_IMPACT)&&T([]),i.includes($.COUNTRIES)&&m([]),i.includes($.PRICE_RANGES)&&E([])},[B]);const{data:D,loading:M}=ue(Ee,{client:le,variables:{suppressedFacet:e.length>0?e:null}});g.useEffect(()=>{if(M||!D?.GenericVariant?.facets)return;const i=D.GenericVariant.facets,o=i.CategoriesCategoryFacet?.Title?.map(r=>r?.name),C=i.CountryCategoryFacet?.Title?.map(r=>r?.name),s=i.PriceCategoryFacet?.Title?.map(r=>r?.name),l=o?.filter(r=>typeof r=="string")||[],z=C?.filter(r=>typeof r=="string")||[],Q=s?.filter(r=>typeof r=="string")||[],w=d.filter(r=>l.includes(r)),F=h.filter(r=>z.includes(r)),S=_.filter(r=>Q.includes(r));w.length!==d.length&&T(w),F.length!==h.length&&m(F),S.length!==_.length&&E(S),V(!0)},[D,d,h,_]);const{loading:L,error:J,data:k}=ue(Re,{client:le,variables:{searchTerm:O||void 0,areasOfImpactFacetTerms:d.length>0?d:null,countryFacetTerms:h.length>0?h:null,priceFacetTerms:_.length>0?_:null,skip:(p-1)*q,limit:q,orderBy:v,suppressedFacet:e.length>0?e:null},fetchPolicy:"network-only",skip:M||!U}),W=g.useMemo(()=>k?.GenericVariant?.items||[],[k]),b=k?.GenericVariant?.total||0,K=b>0?(p-1)*q+1:0,X=Math.min(p*q,b),H=Math.ceil(b/q),Z={start:K,end:X,total:b};g.useEffect(()=>{if(L)return;const i=k?.GenericVariant?.facets,o=i?.CategoriesCategoryFacet,C=i?.CountryCategoryFacet,s=i?.PriceCategoryFacet,l=[],z=c.includes("areas-of-impact");if(o?.Title&&o.Title.length>0&&!z){const F=re(o.Title,d).filter(S=>!e.includes(S.value));if(F.length>0){const S=P.find(r=>r.id===$.AREAS_OF_IMPACT);l.push({id:$.AREAS_OF_IMPACT,name:f.AREAS_OF_IMPACT,title:t,expanded:S?.expanded??F.some(r=>r.checked),items:F})}}const Q=c.includes("countries");if(C?.Title&&C.Title.length>0&&!Q){const F=re(C.Title,h).filter(S=>!e.includes(S.value));if(F.length>0){const S=P.find(r=>r.id===$.COUNTRIES);l.push({id:$.COUNTRIES,name:f.COUNTRIES,title:y,expanded:S?.expanded??F.some(r=>r.checked),items:F})}}const w=c.includes("price-ranges");if(s?.Title&&s.Title.length>0&&!w){let F=re(s.Title,_).filter(S=>!e.includes(S.value));if(n.length>0&&(F=F.sort((S,r)=>{const te=n.indexOf(S.value),ae=n.indexOf(r.value);return te===-1&&ae===-1?0:te===-1?1:ae===-1?-1:te-ae})),F.length>0){const S=P.find(r=>r.id===$.PRICE_RANGES);l.push({id:$.PRICE_RANGES,name:f.PRICE_RANGES,title:A,expanded:S?.expanded??F.some(r=>r.checked),items:F})}}R(l)},[k,L,d,h,_,e,c,t,y,A,n]);const ee=g.useMemo(()=>{const i=[];return d.forEach(o=>{const s=P.find(l=>
101l.name===f.AREAS_OF_IMPACT)?.items.find(l=>l.value===o);s&&i.push({label:s.name,dataType:f.AREAS_OF_IMPACT,dataValue:o})}),h.forEach(o=>{const s=P.find(l=>l.name===f.COUNTRIES)?.items.find(l=>l.value===o);s&&i.push({label:s.name,dataType:f.COUNTRIES,dataValue:o})}),_.forEach(o=>{const s=P.find(l=>l.name===f.PRICE_RANGES)?.items.find(l=>l.value===o);s&&i.push({label:s.name,dataType:f.PRICE_RANGES,dataValue:o})}),i},[P,d,h,_]);return{currentPage:p,setCurrentPage:I,searchTerm:O,facets:P,facetsLoading:L||M,items:W,itemsLoading:L||M,itemsError:J,results:Z,totalPages:H,tags:ee,sortBy:N,setSortBy:j,handleFacetChange:(i,o,C)=>{i===f.AREAS_OF_IMPACT?T(s=>C?[...s,o]:s.filter(l=>l!==o)):i===f.COUNTRIES?m(s=>C?[...s,o]:s.filter(l=>l!==o)):i===f.PRICE_RANGES&&E(s=>C?[...s,o]:s.filter(l=>l!==o)),I(1)},handleSearchSubmit:i=>{x(i),I(1),T([]),m([]),E([])},handleTagClick:(i,o)=>{i===f.AREAS_OF_IMPACT?T(C=>C.filter(s=>s!==o)):i===f.COUNTRIES?m(C=>C.filter(s=>s!==o)):i===f.PRICE_RANGES&&E(C=>C.filter(s=>s!==o))},handleClearAll:()=>{I(1),x(""),T([]),m([]),E([])}}},Xe=({noResultsTitle:a,noResultsBrush:t,noResultsDescription:y="Try adjusting your search or filters.",searchPlaceholder:A="Search Gift Catalog",filtersHeader:e="Filters",clearAllFacetsText:c="Clear All",showResultsFacetsText:n="Show Results",showAllFacetsButtonLabel:p,areasOfImpactFacetTitle:I="Areas of Impact",countriesFacetTitle:O="Countries",priceRangesFacetTitle:x="Price Ranges",noResultsIconName:d,resultsTemplate:T,honorCardHeader:h,honorCardDescription:m,honorCardLinkHref:_,honorCardLinkLabel:E,sortByLabel:P="Sort by",sortByPopularityLabel:R="Popularity",sortByPriceLowLabel:N="Price (low to high)",sortByPriceHighLabel:j="Price (high to low)",suppressedFacets:v,suppresedFacetGroups:U,priceTagsSort:V,basketButtonLabel:B="Add to Basket",basketButtonAddedLabel:D="Added to Basket",basketButtonLoadingLabel:M="Adding...",cartEndpoint:L="/api/cart"})=>{const J=g.useMemo(()=>{if(!v)return[];try{return JSON.parse(v)}catch{return[]}},[v]),k=g.useMemo(()=>{if(!U)return[];try{return JSON.parse(U)}catch{return[]}},[U]),W=g.useMemo(()=>{if(!V)return[];try{return JSON.parse(V)}catch{return[]}},[V]),b=h?{header:h,description:m||"",linkHref:_||"",linkLabel:E||""}:void 0,K=g.useMemo(()=>[{label:R,value:G.POPULARITY},{label:N,value:G.PRICE_LOW},{label:j,value:G.PRICE_HIGH}],[R,N,j]),{currentPage:X,setCurrentPage:H,searchTerm:Z,facets:ee,facetsLoading:se,items:ne,itemsLoading:ie,itemsError:ce,results:i,totalPages:o,tags:C,sortBy:s,setSortBy:l,handleFacetChange:z,handleSearchSubmit:Q,handleTagClick:w,handleClearAll:F}=be({areasOfImpactFacetTitle:I,countriesFacetTitle:O,priceRangesFacetTitle:x,suppressedFacets:J,suppresedFacetGroups:k,priceTagsSort:W}),S=g.useCallback(r=>{l(r),H(1)},[l,H]);return u.jsxs("div",{className:"container listing__container",children:[u.jsx(Pe,{facets:ee,facetsLoading:se,placeholder:A,searchValue:Z,filtersHeader:e,onFacetChange:z,onClearAll:F,onSearchSubmit:Q,clearAllFacetsText:c,showResultsFacetsText:n,showAllLabel:p,noResults:i.total===0,children:b&&u.jsx("div",{className:"listing__honor-card",dangerouslySetInnerHTML:{__html:de(b,{})}})}),u.jsxs("div",{className:"listing__content",children:[u.jsx(Fe,{results:i,resultsTemplate:T,tags:C,onTagClick:w,onClearAll:F,children:u.jsx(Ie,{label:P,options:K,value:s,onChange:S,orientation:"horizontal"})}),ie?u.jsx(pe,{}):ce?u.jsxs("div",{className:"gift-listing__error",children:[u.jsx("h3",{children:"Error loading results"}),u.jsx("p",{children:"Please try again later."})]}):i.total===0?u.jsx(he,{title:a,description:y,iconName:d,highlightBrush:t}):u.jsx(_e,{items:ne,basketButtonLabel:B,basketButtonAddedLabel:D,basketButtonLoadingLabel:M,cartEndpoint:L}),u.jsx(Ce,{totalPages:o,activePage:X,onChange:r=>H(r)})]}),b&&u.jsx("div",{className:"listing__honor-card",dangerouslySetInnerHTML:{__html:de(b,{})}})]})};export{Xe as default};
102//# sourceMappingURL=B1VVPlug-giftListing.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.