Added Prime Day deals to bottom of page.
This commit is contained in:
parent
f615e75a0f
commit
d0f40b8a9f
|
@ -91,7 +91,7 @@ const brand: Brand = ALL_BRANDS.find(b => b.slug === product.brandStoreSlug)!;
|
|||
<br />
|
||||
</main>
|
||||
{product?.amazonLink &&
|
||||
<span slot="disclaimers">As an Amazon Associate I earn from qualifying purchases.</span>
|
||||
<span slot="disclaimers">As an Amazon Associate I earn from qualifying purchases. <a href="https://www.amazon.com/primeday?hvdev=c&hvadid=78271555236403&hvqmt=e&hvbmt=be&discounts-widget=%2522%257B%255C%2522state%255C%2522%253A%257B%255C%2522refinementFilters%255C%2522%253A%257B%257D%257D%252C%255C%2522version%255C%2522%253A1%257D%2522&linkCode=ll2&tag=dashersupply-20&linkId=017bf44c47d82bb5305c529c1fb82bd7&language=en_US&ref_=as_li_ss_tl">Check out the latest Prime Day deals on Amazon.</a></span>
|
||||
}
|
||||
</Layout>
|
||||
|
||||
|
|
|
@ -116,6 +116,11 @@ import { ALL_CATEGORIES } from '../data/categories';
|
|||
</p>
|
||||
</div>
|
||||
</main>
|
||||
<span slot="disclaimers">
|
||||
{ /* Temporarily enabled on full blast. */ }
|
||||
As an Amazon Associate I earn from qualifying purchases.
|
||||
<a href="https://www.amazon.com/primeday?hvdev=c&hvadid=78271555236403&hvqmt=e&hvbmt=be&discounts-widget=%2522%257B%255C%2522state%255C%2522%253A%257B%255C%2522refinementFilters%255C%2522%253A%257B%257D%257D%252C%255C%2522version%255C%2522%253A1%257D%2522&linkCode=ll2&tag=dashersupply-20&linkId=017bf44c47d82bb5305c529c1fb82bd7&language=en_US&ref_=as_li_ss_tl">Check out the latest Prime Day deals on Amazon.</a>
|
||||
</span>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
|
|
@ -56,7 +56,7 @@ const isAnyAmazon = brandProducts.find(p => p.amazonLink) || false;
|
|||
</ul>
|
||||
</main>
|
||||
{isAnyAmazon &&
|
||||
<span slot="disclaimers">As an Amazon Associate I earn from qualifying purchases.</span>
|
||||
<span slot="disclaimers">As an Amazon Associate I earn from qualifying purchases. <a href="https://www.amazon.com/primeday?hvdev=c&hvadid=78271555236403&hvqmt=e&hvbmt=be&discounts-widget=%2522%257B%255C%2522state%255C%2522%253A%257B%255C%2522refinementFilters%255C%2522%253A%257B%257D%257D%252C%255C%2522version%255C%2522%253A1%257D%2522&linkCode=ll2&tag=dashersupply-20&linkId=017bf44c47d82bb5305c529c1fb82bd7&language=en_US&ref_=as_li_ss_tl">Check out the latest Prime Day deals on Amazon.</a></span>
|
||||
}
|
||||
</Layout>
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ const isAnyAmazon = categoryProducts.find(p => p.amazonLink) || false;
|
|||
<br />
|
||||
</main>
|
||||
{isAnyAmazon &&
|
||||
<span slot="disclaimers">As an Amazon Associate I earn from qualifying purchases.</span>
|
||||
<span slot="disclaimers">As an Amazon Associate I earn from qualifying purchases. <a href="https://www.amazon.com/primeday?hvdev=c&hvadid=78271555236403&hvqmt=e&hvbmt=be&discounts-widget=%2522%257B%255C%2522state%255C%2522%253A%257B%255C%2522refinementFilters%255C%2522%253A%257B%257D%257D%252C%255C%2522version%255C%2522%253A1%257D%2522&linkCode=ll2&tag=dashersupply-20&linkId=017bf44c47d82bb5305c529c1fb82bd7&language=en_US&ref_=as_li_ss_tl">Check out the latest Prime Day deals on Amazon.</a></span>
|
||||
}
|
||||
</Layout>
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ import { getProductsForCategoryId } from '../data/products';
|
|||
))}
|
||||
</ul>
|
||||
<p class="instructions">
|
||||
We choose brand names you can trust.
|
||||
We choose brand names you can trust. As an Amazon Associate I earn from qualifying purchases.
|
||||
</p>
|
||||
<ul role="list" class="link-card-grid brands">
|
||||
{ALL_BRANDS.map(brand => (
|
||||
|
@ -31,6 +31,11 @@ import { getProductsForCategoryId } from '../data/products';
|
|||
))}
|
||||
</ul>
|
||||
</main>
|
||||
<span slot="disclaimers">
|
||||
{ /* Temporarily enabled on full blast. */ }
|
||||
As an Amazon Associate I earn from qualifying purchases.
|
||||
<a href="https://www.amazon.com/primeday?hvdev=c&hvadid=78271555236403&hvqmt=e&hvbmt=be&discounts-widget=%2522%257B%255C%2522state%255C%2522%253A%257B%255C%2522refinementFilters%255C%2522%253A%257B%257D%257D%252C%255C%2522version%255C%2522%253A1%257D%2522&linkCode=ll2&tag=dashersupply-20&linkId=017bf44c47d82bb5305c529c1fb82bd7&language=en_US&ref_=as_li_ss_tl">Check out the latest Prime Day deals on Amazon.</a>
|
||||
</span>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
|
|
75
src/types/deep-array.ts
Normal file
75
src/types/deep-array.ts
Normal file
|
@ -0,0 +1,75 @@
|
|||
export class DeepArray<T> extends Array<T> {
|
||||
public constructor(array: T[]|Array<T>|DeepArray<T>) {
|
||||
// console.log("Constructing DeepArray<T> with array =", array);
|
||||
super();
|
||||
this.push(...array);
|
||||
}
|
||||
public mapRecursive<FromT, ToT>(this: FromT[], callbackfn: (value: FromT, index: number, array: DeepArray<FromT>) => ToT, childrenPropertyName: string): DeepArray<ToT> | undefined {
|
||||
if(!childrenPropertyName){
|
||||
throw "mapRecursive requires parameter `childrenPropertyName`";
|
||||
}
|
||||
const result: DeepArray<ToT> = new DeepArray([]);
|
||||
this.forEach((element: any) => {
|
||||
if (Array.isArray(element[childrenPropertyName])) {
|
||||
result.push(...(new DeepArray<FromT>(element[childrenPropertyName])).mapRecursive<FromT,ToT>(callbackfn, childrenPropertyName) as ToT[]);
|
||||
} else {
|
||||
result.push(callbackfn(element, 0, new DeepArray<FromT>(this)));
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
public findRecursive<T>(this: DeepArray<T>, predicate: (value: T) => boolean, childrenPropertyName: string): T | undefined {
|
||||
if(!childrenPropertyName){
|
||||
throw "findRecursive requires parameter `childrenPropertyName`";
|
||||
}
|
||||
let initialFind = this.find(predicate);
|
||||
if (initialFind) {
|
||||
return initialFind;
|
||||
}
|
||||
let elementsWithChildren = this.asArray().filter((x: any, index: number, array: T[]) => { return x[childrenPropertyName] });
|
||||
if (elementsWithChildren.length) {
|
||||
let childElements: T[] = [];
|
||||
elementsWithChildren.forEach((x: any) => {
|
||||
if (x[childrenPropertyName])
|
||||
childElements.push(...x[childrenPropertyName]);
|
||||
});
|
||||
return new DeepArray<T>(childElements).findRecursive(predicate, childrenPropertyName);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
public asArray<T>(this: T[]): T[] {
|
||||
let a: T[] = [];
|
||||
a.push(...this);
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @example
|
||||
* // How to use this module:
|
||||
* // Example usage:
|
||||
* type Simple = string;
|
||||
* interface Complex {
|
||||
* interestingProperty: Simple;
|
||||
* recursiveChildren?: Complex[];
|
||||
* }
|
||||
* let deepArray = new DeepArray<Complex>([ { interestingProperty: 'a', recursiveChildren: [ { interestingProperty: 'b' } ] }]);
|
||||
* // Example 1: Map from Complex to Simple.
|
||||
* deepArray.mapRecursive<Complex, Simple>((complex) => complex.interestingProperty, 'recursiveChildren');
|
||||
* // Example 2: Find an element deeply in the tree.
|
||||
* let result = deepArray.findRecursive<Complex>((complex) => complex.interestingProperty === 'b', 'recursiveChildren');
|
||||
*/
|
||||
|
||||
// How to use this module:
|
||||
// Example usage:
|
||||
type Simple = string;
|
||||
interface Complex {
|
||||
interestingProperty: Simple;
|
||||
recursiveChildren?: Complex[];
|
||||
}
|
||||
let deepArray = new DeepArray<Complex>([ { interestingProperty: 'a', recursiveChildren: [ { interestingProperty: 'b' } ] }]);
|
||||
// Example 1: Map from Complex to Simple.
|
||||
deepArray.mapRecursive<Complex, Simple>((complex) => complex.interestingProperty, 'recursiveChildren');
|
||||
// Example 2: Find an element deeply in the tree.
|
||||
console.log("Checkpoint 3");
|
||||
let result = deepArray.findRecursive<Complex>((complex) => complex.interestingProperty === 'b', 'recursiveChildren');
|
Loading…
Reference in New Issue
Block a user