Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Register template helpers #192

Merged
merged 4 commits into from
Jun 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions web/app/components/header/facet-dropdown.hbs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{{! @glint-nocheck: not typesafe yet }}

{{! @glint-ignore: not typesafe yet }}
<X::DropdownList
@items={{@facets}}
@listIsOrdered={{true}}
class="facet-dropdown-popover"
{{! @glint-ignore: not typesafe yet }}
...attributes
>
<:anchor as |dd|>
Expand Down
7 changes: 0 additions & 7 deletions web/app/helpers/add.js

This file was deleted.

36 changes: 36 additions & 0 deletions web/app/helpers/add.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { helper } from "@ember/component/helper";

interface AddHelperSignature {
Args: {
Positional: [first: string | number, second: string | number];
};
Return: number;
}

const addHelper = helper<AddHelperSignature>(
([first, second]: [string | number, string | number]) => {
let firstInteger = 0;
let secondInteger = 0;

if (typeof first === "number") {
firstInteger = first;
} else {
firstInteger = parseInt(first);
}

if (typeof second === "number") {
secondInteger = second;
} else {
secondInteger = parseInt(second);
}
return firstInteger + secondInteger;
}
);

export default addHelper;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
add: typeof addHelper;
}
}
23 changes: 16 additions & 7 deletions web/app/helpers/get-facet-query-hash.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,26 @@ import { inject as service } from "@ember/service";
import { FacetName } from "hermes/components/header/toolbar";
import ActiveFiltersService from "hermes/services/active-filters";

interface GetFacetQueryHashHelperSignature {
Args: {
Positional: [facetName: string, clickedFilter: string, isSelected: boolean];
};
}
/**
* Generates a query hash appropriate for the facet item.
* If the facet is in the ActiveFiltersService index, it will
* be removed from the query hash. Otherwise, it'll be added.
* Used by the FacetDropdown to add/remove filters on click.
*/
export default class GetFacetQueryHashHelper extends Helper {
export default class GetFacetQueryHashHelper extends Helper<GetFacetQueryHashHelperSignature> {
@service declare activeFilters: ActiveFiltersService;

compute([facetName, clickedFilter, isSelected]: [
string,
string,
boolean,
() => void
]) {
compute(
positional: [facetName: string, clickedFilter: string, isSelected: boolean]
) {
// Translate the UI facetName to the one used in the query hash.
let translatedFacetName;
let [facetName, clickedFilter, isSelected] = positional;

switch (facetName) {
case "Type":
Expand Down Expand Up @@ -57,3 +60,9 @@ export default class GetFacetQueryHashHelper extends Helper {
}
}
}

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
"get-facet-query-hash": typeof GetFacetQueryHashHelper;
}
}
10 changes: 0 additions & 10 deletions web/app/helpers/get-first-letter.js

This file was deleted.

25 changes: 25 additions & 0 deletions web/app/helpers/get-first-letter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { helper } from "@ember/component/helper";

export interface GetFirstLetterSignature {
Args: {
Positional: [maybeString: string | null | undefined];
};
Return: string | null;
}

const getFirstLetter = helper<GetFirstLetterSignature>(
([maybeString]: [string | null | undefined | number]) => {
if (typeof maybeString === "string") {
return maybeString.match(/[a-zA-Z]/)?.[0] ?? null;
}
return null;
}
);

export default getFirstLetter;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
"get-first-letter": typeof getFirstLetter;
}
}
5 changes: 0 additions & 5 deletions web/app/helpers/get-product-id.js

This file was deleted.

23 changes: 23 additions & 0 deletions web/app/helpers/get-product-id.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { helper } from "@ember/component/helper";
import getProductId from "hermes/utils/get-product-id";

export interface GetProductIDSignature {
Args: {
Positional: [string | undefined];
};
}

const getProductIDHelper = helper<GetProductIDSignature>(([productName]) => {
if (!productName) {
return null;
}
return getProductId(productName);
});

export default getProductIDHelper;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
"get-product-id": typeof getProductIDHelper;
}
}
10 changes: 5 additions & 5 deletions web/app/helpers/has-approved-doc.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { helper } from "@ember/component/helper";
import { HermesDocument } from "hermes/types/document";

export interface HasApprovedDocSignature {
interface HasApprovedDocHelperSignature {
Args: {
Positional: [HermesDocument, string];
Positional: [document: HermesDocument, approverEmail: string];
};
Return: boolean;
}

const hasApprovedDoc = helper<HasApprovedDocSignature>(
const hasApprovedDocHelper = helper<HasApprovedDocHelperSignature>(
([document, approverEmail]: [HermesDocument, string]) => {
if (document.approvedBy) {
return document.approvedBy.some((email) => email === approverEmail);
Expand All @@ -18,10 +18,10 @@ const hasApprovedDoc = helper<HasApprovedDocSignature>(
}
);

export default hasApprovedDoc;
export default hasApprovedDocHelper;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
"has-approved-doc": typeof hasApprovedDoc;
"has-approved-doc": typeof hasApprovedDocHelper;
}
}
23 changes: 20 additions & 3 deletions web/app/helpers/html-element.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
import { helper } from "@ember/component/helper";
import htmlElement from "hermes/utils/html-element";

export default helper(([selector]: [string]) => {
return htmlElement(selector);
});
interface HtmlElementHelperSignature {
Args: {
Positional: [selector: string];
};
Return: HTMLElement;
}

const htmlElementHelper = helper<HtmlElementHelperSignature>(
([selector]: [string]) => {
return htmlElement(selector);
}
);

export default htmlElementHelper;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
"html-element": typeof htmlElementHelper;
}
}
7 changes: 0 additions & 7 deletions web/app/helpers/lowercase.js

This file was deleted.

22 changes: 22 additions & 0 deletions web/app/helpers/lowercase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { helper } from "@ember/component/helper";

export interface LowercaseHelperSignature {
Args: {
Positional: [value: string | number | boolean | undefined];
};
Return: string;
}

const lowercaseHelper = helper<LowercaseHelperSignature>(
([value]: [string | number | boolean | undefined]) => {
return value?.toString().toLowerCase() ?? "";
}
);

export default lowercaseHelper;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
lowercase: typeof lowercaseHelper;
}
}
19 changes: 18 additions & 1 deletion web/app/helpers/parse-date.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
import { helper } from "@ember/component/helper";
import parseDate from "hermes/utils/parse-date";
export interface ParseDateHelperSignature {
Args: {
Positional: [
time: string | number | Date | undefined,
monthFormat: "short" | "long"
];
Return: Date | undefined;
};
}

export default helper(
const parseDateHelper = helper<ParseDateHelperSignature>(
([time, monthFormat = "short"]: [
string | number | Date | undefined,
"short" | "long"
]) => {
return parseDate(time, monthFormat);
}
);

export default parseDateHelper;

declare module "@glint/environment-ember-loose/registry" {
export default interface Registry {
"parse-date": typeof parseDateHelper;
}
}