@servicetitan/mpa-components 0.1.0 → 0.2.0

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.
Files changed (38) hide show
  1. package/lib/components/settings/email-validation/email-validation.stories.d.ts +11 -0
  2. package/lib/components/settings/email-validation/email-validation.stories.d.ts.map +1 -0
  3. package/lib/components/settings/email-validation/email-validation.stories.js +84 -0
  4. package/lib/components/settings/email-validation/email-validation.stories.js.map +1 -0
  5. package/lib/components/settings/email-validation/index.d.ts +32 -0
  6. package/lib/components/settings/email-validation/index.d.ts.map +1 -0
  7. package/lib/components/settings/email-validation/index.js +39 -0
  8. package/lib/components/settings/email-validation/index.js.map +1 -0
  9. package/lib/components/settings/result-definitions-modal/header.d.ts +3 -0
  10. package/lib/components/settings/result-definitions-modal/header.d.ts.map +1 -0
  11. package/lib/components/settings/result-definitions-modal/header.js +5 -0
  12. package/lib/components/settings/result-definitions-modal/header.js.map +1 -0
  13. package/lib/components/settings/result-definitions-modal/index.d.ts +7 -0
  14. package/lib/components/settings/result-definitions-modal/index.d.ts.map +1 -0
  15. package/lib/components/settings/result-definitions-modal/index.js +8 -0
  16. package/lib/components/settings/result-definitions-modal/index.js.map +1 -0
  17. package/lib/components/settings/result-definitions-modal/result-definitions-modal.module.less +17 -0
  18. package/lib/components/settings/result-definitions-modal/row.d.ts +14 -0
  19. package/lib/components/settings/result-definitions-modal/row.d.ts.map +1 -0
  20. package/lib/components/settings/result-definitions-modal/row.js +21 -0
  21. package/lib/components/settings/result-definitions-modal/row.js.map +1 -0
  22. package/lib/components/settings/settings-section/index.d.ts +1 -2
  23. package/lib/components/settings/settings-section/index.d.ts.map +1 -1
  24. package/lib/components/settings/settings-section/settings-section.stories.d.ts +9 -0
  25. package/lib/components/settings/settings-section/settings-section.stories.d.ts.map +1 -0
  26. package/lib/components/settings/settings-section/settings-section.stories.js +12 -0
  27. package/lib/components/settings/settings-section/settings-section.stories.js.map +1 -0
  28. package/package.json +2 -2
  29. package/src/components/settings/email-validation/email-validation.stories.tsx +89 -0
  30. package/src/components/settings/email-validation/index.tsx +267 -0
  31. package/src/components/settings/result-definitions-modal/header.tsx +27 -0
  32. package/src/components/settings/result-definitions-modal/index.tsx +127 -0
  33. package/src/components/settings/result-definitions-modal/result-definitions-modal.module.less +17 -0
  34. package/src/components/settings/result-definitions-modal/result-definitions-modal.module.less.d.ts +5 -0
  35. package/src/components/settings/result-definitions-modal/row.tsx +48 -0
  36. package/src/components/settings/settings-section/index.tsx +1 -1
  37. package/src/components/settings/settings-section/settings-section.stories.tsx +16 -0
  38. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ declare type TType = 'high' | 'medium' | 'low';
3
+ export declare const EmailValidation: ({ className, handleDownload, loading, resultGrid, setValidationRiskType, validationRiskType, }: import(".").EmailValidationProps<TType, string>) => JSX.Element;
4
+ declare const _default: {
5
+ title: string;
6
+ component: ({ className, handleDownload, loading, resultGrid, setValidationRiskType, validationRiskType, }: import(".").EmailValidationProps<TType, string>) => JSX.Element;
7
+ parameters: {};
8
+ };
9
+ export default _default;
10
+ export declare function EmailValidationSimple(): JSX.Element;
11
+ //# sourceMappingURL=email-validation.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-validation.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/email-validation/email-validation.stories.tsx"],"names":[],"mappings":";AAMA,aAAK,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAGvC,eAAO,MAAM,eAAe,kKAuB1B,CAAC;;;;;;AAEH,wBAIE;AAEF,wBAAgB,qBAAqB,gBAgDpC"}
@@ -0,0 +1,84 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { useEffect, useState } from 'react';
12
+ import { TableState } from '@servicetitan/table';
13
+ import { InMemoryDataSource } from '@servicetitan/data-query';
14
+ import { emailValidationHoc } from '.';
15
+ export const EmailValidation = emailValidationHoc({
16
+ resultToText: new Map([
17
+ ['ok', 'Valid'],
18
+ ['fail', 'Invalid'],
19
+ ]),
20
+ levelTypeMap: {
21
+ high: 'high',
22
+ medium: 'medium',
23
+ low: 'low',
24
+ },
25
+ levelsResultMap: new Map([
26
+ ['high', ['ok', 'fail']],
27
+ ['medium', ['ok', 'fail']],
28
+ ['high', ['ok']],
29
+ ]),
30
+ resultToTooltipText: new Map([
31
+ ['ok', 'Valid'],
32
+ ['fail', 'Invalid'],
33
+ ]),
34
+ TenantDateCell: (props) => {
35
+ const value = props.dataItem[props.field];
36
+ return _jsx("td", Object.assign({ className: props.className }, { children: value.toString() }), void 0);
37
+ },
38
+ });
39
+ export default {
40
+ title: 'MPA Components/settings/EmailValidation',
41
+ component: EmailValidation,
42
+ parameters: {},
43
+ };
44
+ export function EmailValidationSimple() {
45
+ const [type, setType] = useState('high');
46
+ const [loading, setLoading] = useState(true);
47
+ const grid = new TableState({
48
+ dataSource: null,
49
+ pageSize: 15,
50
+ });
51
+ useEffect(() => {
52
+ function load() {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ if (!loading) {
55
+ return;
56
+ }
57
+ setLoading(true);
58
+ const dataSource = new InMemoryDataSource([
59
+ {
60
+ id: 1,
61
+ active: false,
62
+ createdOn: new Date(),
63
+ result: 'ok',
64
+ email: 'varg@vikernes.com',
65
+ dateAdded: new Date(),
66
+ },
67
+ {
68
+ id: 2,
69
+ active: true,
70
+ createdOn: new Date(),
71
+ result: 'fail',
72
+ email: 'joe@biden.com',
73
+ dateAdded: new Date(),
74
+ },
75
+ ]);
76
+ yield grid.setDataSource(dataSource, true);
77
+ setLoading(false);
78
+ });
79
+ }
80
+ load();
81
+ });
82
+ return (_jsx(EmailValidation, { loading: loading, resultGrid: grid, validationRiskType: type, setValidationRiskType: setType, handleDownload: () => alert('downloading csv') }, void 0));
83
+ }
84
+ //# sourceMappingURL=email-validation.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-validation.stories.js","sourceRoot":"","sources":["../../../../src/components/settings/email-validation/email-validation.stories.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAA8B,MAAM,GAAG,CAAC;AAKnE,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAiB;IAC9D,YAAY,EAAE,IAAI,GAAG,CAAC;QAClB,CAAC,IAAI,EAAE,OAAO,CAAC;QACf,CAAC,MAAM,EAAE,SAAS,CAAC;KACtB,CAAC;IACF,YAAY,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,KAAK;KACb;IACD,eAAe,EAAE,IAAI,GAAG,CAAC;QACrB,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;KACnB,CAAC;IACF,mBAAmB,EAAE,IAAI,GAAG,CAAC;QACzB,CAAC,IAAI,EAAE,OAAO,CAAC;QACf,CAAC,MAAM,EAAE,SAAS,CAAC;KACtB,CAAC;IACF,cAAc,EAAE,CAAC,KAAqB,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;QAC3C,OAAO,2BAAI,SAAS,EAAE,KAAK,CAAC,SAAS,gBAAG,KAAK,CAAC,QAAQ,EAAE,YAAM,CAAC;IACnE,CAAC;CACJ,CAAC,CAAC;AAEH,eAAe;IACX,KAAK,EAAE,yCAAyC;IAChD,SAAS,EAAE,eAAe;IAC1B,UAAU,EAAE,EAAE;CACjB,CAAC;AAEF,MAAM,UAAU,qBAAqB;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAQ,MAAM,CAAC,CAAC;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAsC;QAC7D,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,SAAe,IAAI;;gBACf,IAAI,CAAC,OAAO,EAAE;oBACV,OAAO;iBACV;gBACD,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAsC;oBAC3E;wBACI,EAAE,EAAE,CAAC;wBACL,MAAM,EAAE,KAAK;wBACb,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,MAAM,EAAE,IAAI;wBACZ,KAAK,EAAE,mBAAmB;wBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;qBACxB;oBACD;wBACI,EAAE,EAAE,CAAC;wBACL,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,MAAM,EAAE,MAAM;wBACd,KAAK,EAAE,eAAe;wBACtB,SAAS,EAAE,IAAI,IAAI,EAAE;qBACxB;iBACJ,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC3C,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;SAAA;QACD,IAAI,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,IAAI,EAChB,kBAAkB,EAAE,IAAI,EACxB,qBAAqB,EAAE,OAAO,EAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAChD,CACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { FC } from 'react';
2
+ import { TableState, TableCellProps } from '@servicetitan/table';
3
+ export interface EmailValidationTableRecord<T> {
4
+ id: number;
5
+ active: boolean;
6
+ createdOn: Date;
7
+ email?: string | undefined;
8
+ result: T;
9
+ dateAdded?: Date | undefined;
10
+ }
11
+ export interface EmailValidationProps<TEmailValidationType extends string = string, TEmailValidationResult extends string = string> {
12
+ className?: string;
13
+ loading: boolean;
14
+ resultGrid: TableState<EmailValidationTableRecord<TEmailValidationResult>>;
15
+ validationRiskType: TEmailValidationType;
16
+ handleDownload(): void;
17
+ setValidationRiskType(type: TEmailValidationType): void;
18
+ }
19
+ interface EmailValidationHocOptions<TEmailValidationType extends string = string, TEmailValidationResult extends string = string> {
20
+ resultToText: Map<TEmailValidationResult, string>;
21
+ levelTypeMap: {
22
+ high: TEmailValidationType;
23
+ medium: TEmailValidationType;
24
+ low: TEmailValidationType;
25
+ };
26
+ levelsResultMap: Map<TEmailValidationType, TEmailValidationResult[]>;
27
+ resultToTooltipText: Map<TEmailValidationResult, string>;
28
+ TenantDateCell: FC<TableCellProps>;
29
+ }
30
+ export declare function emailValidationHoc<TEmailValidationType extends string = string, TEmailValidationResult extends string = string>({ resultToText, levelTypeMap, resultToTooltipText, levelsResultMap, TenantDateCell, }: EmailValidationHocOptions<TEmailValidationType, TEmailValidationResult>): ({ className, handleDownload, loading, resultGrid, setValidationRiskType, validationRiskType, }: EmailValidationProps<TEmailValidationType>) => JSX.Element;
31
+ export {};
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/email-validation/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAgBxC,OAAO,EAMH,UAAU,EACV,cAAc,EACjB,MAAM,qBAAqB,CAAC;AAS7B,MAAM,WAAW,0BAA0B,CAAC,CAAC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB,CACjC,oBAAoB,SAAS,MAAM,GAAG,MAAM,EAC5C,sBAAsB,SAAS,MAAM,GAAG,MAAM;IAE9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC3E,kBAAkB,EAAE,oBAAoB,CAAC;IACzC,cAAc,IAAI,IAAI,CAAC;IACvB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3D;AAED,UAAU,yBAAyB,CAC/B,oBAAoB,SAAS,MAAM,GAAG,MAAM,EAC5C,sBAAsB,SAAS,MAAM,GAAG,MAAM;IAE9C,YAAY,EAAE,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAClD,YAAY,EAAE;QACV,IAAI,EAAE,oBAAoB,CAAC;QAC3B,MAAM,EAAE,oBAAoB,CAAC;QAC7B,GAAG,EAAE,oBAAoB,CAAC;KAC7B,CAAC;IACF,eAAe,EAAE,GAAG,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACrE,mBAAmB,EAAE,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACzD,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;CACtC;AAED,wBAAgB,kBAAkB,CAC9B,oBAAoB,SAAS,MAAM,GAAG,MAAM,EAC5C,sBAAsB,SAAS,MAAM,GAAG,MAAM,EAChD,EACE,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,GACjB,EAAE,yBAAyB,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,oGAyBnE,qBAAqB,oBAAoB,CAAC,iBAiKhD"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import classnames from 'classnames';
3
+ import { action } from 'mobx';
4
+ import { useCallback } from 'react';
5
+ import { observer, useLocalStore } from 'mobx-react';
6
+ import { BodyText, Button, Card, Container, Form, Grid, Layout, Link, Stack, Text, Tooltip, } from '@servicetitan/design-system';
7
+ import { DateRangeColumnMenuFilter, multiSelectColumnMenuFilter, StandardColumnMenuFilter, Table, TableColumn, } from '@servicetitan/table';
8
+ import { ResultDefinitionsModal } from '../result-definitions-modal';
9
+ export function emailValidationHoc({ resultToText, levelTypeMap, resultToTooltipText, levelsResultMap, TenantDateCell, }) {
10
+ const ResultColumnMenuFilter = multiSelectColumnMenuFilter([...resultToText.keys()], result => resultToText.get(result));
11
+ const ResultCell = props => {
12
+ const { result } = props.dataItem;
13
+ return (_jsx("td", Object.assign({ className: "qa-result-cell of-visible-i" }, { children: _jsx(Tooltip, Object.assign({ text: resultToTooltipText.get(result), className: "qa-result-cell-tooltip" }, { children: resultToText.get(result) }), void 0) }), void 0));
14
+ };
15
+ function EmailValidationImpl({ className, handleDownload, loading, resultGrid, setValidationRiskType, validationRiskType, }) {
16
+ const localStore = useLocalStore(() => ({
17
+ open: false,
18
+ setOpen: action(function (state) {
19
+ this.open = state;
20
+ }),
21
+ }));
22
+ const handleCheck = useCallback((riskType) => () => {
23
+ setValidationRiskType(riskType);
24
+ }, [setValidationRiskType]);
25
+ const handleClickLearnMore = () => {
26
+ localStore.setOpen(true);
27
+ };
28
+ const handleClose = () => {
29
+ localStore.setOpen(false);
30
+ };
31
+ const getResultsItemsForLevel = (level) => {
32
+ var _a;
33
+ return (_a = levelsResultMap.get(level)) === null || _a === void 0 ? void 0 : _a.map(r => _jsx("div", { children: r }, r));
34
+ };
35
+ return (_jsxs(Container, Object.assign({ className: classnames(className, 'p-b-5 qa-email-validation') }, { children: [_jsxs(Stack, Object.assign({ justifyContent: "space-between", alignItems: "center", className: "m-b-2" }, { children: [_jsx(Text, Object.assign({ size: 4, className: "m-r-3" }, { children: "Email Validation" }), void 0), _jsx(Button, Object.assign({ small: true, primary: true, onClick: handleDownload, className: "qa-email-validation-download-csv", iconName: "file_download", iconPosition: "left" }, { children: "Download CSV" }), void 0)] }), void 0), _jsxs(Layout, Object.assign({ type: "support", direction: "right" }, { children: [_jsx(Layout.Section, { children: _jsx(Text, Object.assign({ size: 2, className: "m-b-4 c-neutral-90" }, { children: "Email Validation acts like a filter that will block emails from going to bad email addresses. You won't necessarily see these emails in your suppression list, but it will effect your number \u201CSent\u201D." }), void 0) }, void 0), _jsx(Layout.Section, {}, void 0)] }), void 0), _jsxs(Grid, Object.assign({ relaxed: true }, { children: [_jsx(Grid.Column, Object.assign({ width: 3 }, { children: _jsxs(Card, { children: [_jsxs(Card.Section, Object.assign({ light: true }, { children: [_jsx(Text, Object.assign({ bold: true, size: 3, className: "m-b-1" }, { children: "Set Your Preference" }), void 0), _jsx(Text, Object.assign({ size: 2, className: "m-b-1" }, { children: "Choose what level you want to enable for auto-suppression." }), void 0), _jsx(Link, Object.assign({ primary: true, onClick: handleClickLearnMore, className: "qa-email-validation-learn-more" }, { children: "Learn More" }), void 0)] }), void 0), _jsx(Card.Section, { children: _jsx(Form.Radio, { label: _jsxs("div", Object.assign({ className: "m-l-1" }, { children: [_jsxs(Text, Object.assign({ bold: true, size: 3, className: "m-b-1" }, { children: ["High", _jsx("span", Object.assign({ className: "c-neutral-90 fs-1 m-l-1" }, { children: "(recommended)" }), void 0)] }), void 0), _jsx(BodyText, Object.assign({ size: "small", className: "c-neutral-90" }, { children: getResultsItemsForLevel(levelTypeMap.high) }), void 0)] }), void 0), checked: validationRiskType === levelTypeMap.high, onChange: handleCheck(levelTypeMap.high), className: "qa-email-validation-high" }, void 0) }, void 0), _jsx(Card.Section, { children: _jsx(Form.Radio, { label: _jsxs("div", Object.assign({ className: "m-l-1" }, { children: [_jsx(Text, Object.assign({ bold: true, size: 3, className: "m-b-1" }, { children: "Medium" }), void 0), _jsx(BodyText, Object.assign({ size: "small", className: "c-neutral-90" }, { children: getResultsItemsForLevel(levelTypeMap.medium) }), void 0)] }), void 0), checked: validationRiskType === levelTypeMap.medium, onChange: handleCheck(levelTypeMap.medium), className: "qa-email-validation-medium" }, void 0) }, void 0), _jsx(Card.Section, { children: _jsx(Form.Radio, { label: _jsxs("div", Object.assign({ className: "m-l-1" }, { children: [_jsx(Text, Object.assign({ bold: true, size: 3, className: "m-b-1" }, { children: "Low" }), void 0), _jsx(BodyText, Object.assign({ size: "small", className: "c-neutral-90" }, { children: getResultsItemsForLevel(levelTypeMap.low) }), void 0)] }), void 0), checked: validationRiskType === levelTypeMap.low, onChange: handleCheck(levelTypeMap.low), className: "qa-email-validation-low" }, void 0) }, void 0)] }, void 0) }), void 0), _jsx(Grid.Column, Object.assign({ width: 9 }, { children: _jsxs(Table, Object.assign({ tableState: resultGrid, sortable: true, loading: loading, className: "qa-email-validation-table", scrollable: "none" }, { children: [_jsx(TableColumn, { field: "email", title: "Email Address", columnMenu: StandardColumnMenuFilter }, void 0), _jsx(TableColumn, { field: "result", title: "Result", cell: ResultCell, columnMenu: ResultColumnMenuFilter }, void 0), _jsx(TableColumn, { field: "dateAdded", title: "Date Added", cell: TenantDateCell, columnMenu: DateRangeColumnMenuFilter }, void 0)] }), void 0) }), void 0)] }), void 0), localStore.open && _jsx(ResultDefinitionsModal, { onClose: handleClose }, void 0)] }), void 0));
36
+ }
37
+ return observer(EmailValidationImpl);
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/settings/email-validation/index.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EACH,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,OAAO,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,EACL,WAAW,GAGd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AA2CrE,MAAM,UAAU,kBAAkB,CAGhC,EACE,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,GACwD;IACtE,MAAM,sBAAsB,GAAG,2BAA2B,CACtD,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EACxB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CACtC,CAAC;IAEF,MAAM,UAAU,GAAuB,KAAK,CAAC,EAAE;QAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,QAA8C,CAAC;QAExE,OAAO,CACH,2BAAI,SAAS,EAAC,6BAA6B,gBACvC,KAAC,OAAO,kBAAC,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAC,wBAAwB,gBAC7E,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,YACnB,YACT,CACR,CAAC;IACN,CAAC,CAAC;IAEF,SAAS,mBAAmB,CAAC,EACzB,SAAS,EACT,cAAc,EACd,OAAO,EACP,UAAU,EACV,qBAAqB,EACrB,kBAAkB,GACuB;QACzC,MAAM,UAAU,GAA8B,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/D,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,MAAM,CAAC,UAA2C,KAAc;gBACrE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YACtB,CAAC,CAAC;SACL,CAAC,CAAC,CAAC;QAEJ,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,QAA8B,EAAE,EAAE,CAAC,GAAG,EAAE;YACrC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,EACD,CAAC,qBAAqB,CAAC,CAC1B,CAAC;QAEF,MAAM,oBAAoB,GAAG,GAAG,EAAE;YAC9B,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,GAAG,EAAE;YACrB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,CAAC,KAA2B,EAAE,EAAE;;YAC5D,OAAO,MAAA,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,wBAAc,CAAC,IAAL,CAAC,CAAW,CAAC,CAAC;QACxE,CAAC,CAAC;QAEF,OAAO,CACH,MAAC,SAAS,kBAAC,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,2BAA2B,CAAC,iBACpE,MAAC,KAAK,kBAAC,cAAc,EAAC,eAAe,EAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,OAAO,iBACvE,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,8CAEzB,EACP,KAAC,MAAM,kBACH,KAAK,QACL,OAAO,QACP,OAAO,EAAE,cAAc,EACvB,SAAS,EAAC,kCAAkC,EAC5C,QAAQ,EAAC,eAAe,EACxB,YAAY,EAAC,MAAM,0CAGd,aACL,EACR,MAAC,MAAM,kBAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,iBACpC,KAAC,MAAM,CAAC,OAAO,cACX,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,oBAAoB,6OAItC,WACM,EACjB,KAAC,MAAM,CAAC,OAAO,aAAG,aACb,EACT,MAAC,IAAI,kBAAC,OAAO,uBACT,KAAC,IAAI,CAAC,MAAM,kBAAC,KAAK,EAAE,CAAC,gBACjB,MAAC,IAAI,eACD,MAAC,IAAI,CAAC,OAAO,kBAAC,KAAK,uBACf,KAAC,IAAI,kBAAC,IAAI,QAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,iDAE9B,EACP,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,wFAEzB,EACP,KAAC,IAAI,kBACD,OAAO,QACP,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAC,gCAAgC,wCAGvC,aACI,EACf,KAAC,IAAI,CAAC,OAAO,cACT,KAAC,IAAI,CAAC,KAAK,IACP,KAAK,EACD,6BAAK,SAAS,EAAC,OAAO,iBAClB,MAAC,IAAI,kBAAC,IAAI,QAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,yBAEjC,6BAAM,SAAS,EAAC,yBAAyB,2CAElC,aACJ,EACP,KAAC,QAAQ,kBAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc,gBAC1C,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,YACpC,aACT,EAEV,OAAO,EAAE,kBAAkB,KAAK,YAAY,CAAC,IAAI,EACjD,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EACxC,SAAS,EAAC,0BAA0B,WACtC,WACS,EACf,KAAC,IAAI,CAAC,OAAO,cACT,KAAC,IAAI,CAAC,KAAK,IACP,KAAK,EACD,6BAAK,SAAS,EAAC,OAAO,iBAClB,KAAC,IAAI,kBAAC,IAAI,QAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,oCAE9B,EACP,KAAC,QAAQ,kBAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc,gBAC1C,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,YACtC,aACT,EAEV,OAAO,EAAE,kBAAkB,KAAK,YAAY,CAAC,MAAM,EACnD,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,EAC1C,SAAS,EAAC,4BAA4B,WACxC,WACS,EACf,KAAC,IAAI,CAAC,OAAO,cACT,KAAC,IAAI,CAAC,KAAK,IACP,KAAK,EACD,6BAAK,SAAS,EAAC,OAAO,iBAClB,KAAC,IAAI,kBAAC,IAAI,QAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,iCAE9B,EACP,KAAC,QAAQ,kBAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc,gBAC1C,uBAAuB,CAAC,YAAY,CAAC,GAAG,CAAC,YACnC,aACT,EAEV,OAAO,EAAE,kBAAkB,KAAK,YAAY,CAAC,GAAG,EAChD,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,EACvC,SAAS,EAAC,yBAAyB,WACrC,WACS,YACZ,YACG,EACd,KAAC,IAAI,CAAC,MAAM,kBAAC,KAAK,EAAE,CAAC,gBACjB,MAAC,KAAK,kBACF,UAAU,EAAE,UAAU,EACtB,QAAQ,QACR,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,2BAA2B,EACrC,UAAU,EAAC,MAAM,iBAEjB,KAAC,WAAW,IACR,KAAK,EAAC,OAAO,EACb,KAAK,EAAC,eAAe,EACrB,UAAU,EAAE,wBAAwB,WACtC,EACF,KAAC,WAAW,IACR,KAAK,EAAC,QAAQ,EACd,KAAK,EAAC,QAAQ,EACd,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,sBAAsB,WACpC,EACF,KAAC,WAAW,IACR,KAAK,EAAC,WAAW,EACjB,KAAK,EAAC,YAAY,EAClB,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,yBAAyB,WACvC,aACE,YACE,aACX,EACN,UAAU,CAAC,IAAI,IAAI,KAAC,sBAAsB,IAAC,OAAO,EAAE,WAAW,WAAI,aAC5D,CACf,CAAC;IACN,CAAC;IACD,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ export declare const Header: FC;
3
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/result-definitions-modal/header.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,eAAO,MAAM,MAAM,EAAE,EAqBpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Grid, Text } from '@servicetitan/design-system';
3
+ import * as Styles from './result-definitions-modal.module.less';
4
+ export const Header = () => (_jsxs("div", Object.assign({ className: "position-sticky position-t-0 z-popover" }, { children: [_jsxs(Grid, Object.assign({ columns: 3, className: "p-y-1 bg-white" }, { children: [_jsx(Grid.Column, { children: _jsx(Text, Object.assign({ size: 1, className: "c-neutral-90 tt-uppercase" }, { children: "Result" }), void 0) }, void 0), _jsx(Grid.Column, { children: _jsx(Text, Object.assign({ size: 1, className: "c-neutral-90 tt-uppercase" }, { children: "Risk" }), void 0) }, void 0), _jsx(Grid.Column, { children: _jsx(Text, Object.assign({ size: 1, className: "c-neutral-90 tt-uppercase" }, { children: "Recommendation" }), void 0) }, void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0)] }), void 0));
5
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/components/settings/result-definitions-modal/header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,MAAM,MAAM,wCAAwC,CAAC;AAEjE,MAAM,CAAC,MAAM,MAAM,GAAO,GAAG,EAAE,CAAC,CAC5B,6BAAK,SAAS,EAAC,wCAAwC,iBACnD,MAAC,IAAI,kBAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAC,gBAAgB,iBACxC,KAAC,IAAI,CAAC,MAAM,cACR,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,2BAA2B,oCAE7C,WACG,EACd,KAAC,IAAI,CAAC,MAAM,cACR,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,2BAA2B,kCAE7C,WACG,EACd,KAAC,IAAI,CAAC,MAAM,cACR,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,2BAA2B,4CAE7C,WACG,aACX,EACP,aAAI,SAAS,EAAE,MAAM,CAAC,OAAO,WAAI,aAC/B,CACT,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ interface ResultDefinitionsModalProps {
3
+ onClose(): void;
4
+ }
5
+ export declare const ResultDefinitionsModal: FC<ResultDefinitionsModalProps>;
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/result-definitions-modal/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAS3B,UAAU,2BAA2B;IACjC,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAiHlE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import classnames from 'classnames';
3
+ import { Modal, Text } from '@servicetitan/design-system';
4
+ import { Header } from './header';
5
+ import { Row, RiskType } from './row';
6
+ import * as Styles from './result-definitions-modal.module.less';
7
+ export const ResultDefinitionsModal = ({ onClose }) => (_jsxs(Modal, Object.assign({ open: true, closable: true, title: "Email Validation Result Definitions", onClose: onClose, className: classnames(Styles.modal, 'qa-result-definitions-modal') }, { children: [_jsx(Header, {}, void 0), _jsx("div", { className: Styles.wall }, void 0), _jsx(Row, { result: "Undeliverable", risk: RiskType.VeryHigh, recommendation: "Suppress" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["Address was determined invalid after performing multiple checks including MX, SMTP, etc., likely due to:", _jsxs("ul", Object.assign({ className: "m-y-0" }, { children: [_jsx("li", { children: "The receiving recipient domain is not configured to accept email" }, void 0), _jsx("li", { children: "The SMTP commands issued resulted in a hard bounce, i.e., \"user does not exist\" or \"mailbox full\" errors" }, void 0), _jsx("li", { children: "The recipient address historically hard-bounced or appeared on suppression lists" }, void 0), _jsx("li", { children: "Mailbox providers require specific standard for an email address including min/max number of characters, max number of periods, etc." }, void 0)] }), void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsx(Row, { result: "Risky", risk: RiskType.Medium, recommendation: "Proceed With Caution" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["Address was determined risky based on historical analysis or problematic results, likely due to:", _jsx("ul", Object.assign({ className: "m-y-0" }, { children: _jsx("li", { children: "The receiving address may be valid, but was found on one or more suppression lists Addresses matching a known spam trap are not ideal for sending campaigns to and can impact reputation" }, void 0) }), void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsx(Row, { result: "Typo", risk: RiskType.High, recommendation: "Suppress" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["Address was possibly typed incorrectly during sign-up, or matches known typo domains, likely due to:", _jsx("ul", Object.assign({ className: "m-y-0" }, { children: _jsx("li", { children: "Typos are mistyped address domains like \"gmil.com\" instead of \"gmail.com,\" and are often undeliverable. Address is checked against database of common domain misspellings. These kinds of addresses are usually not good for sending." }, void 0) }), void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsx(Row, { result: "Accept-All", risk: RiskType.Medium, recommendation: "Proceed With Caution" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["The receiving domain of the address accepts all mail, indicating it may be a spam trap, likely due to:", _jsx("ul", Object.assign({ className: "m-y-0" }, { children: _jsx("li", { children: "Some domains do not distinguish between existing and non-existing addresses and accept all mail" }, void 0) }), void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsx(Row, { result: "Dispose", risk: RiskType.Medium, recommendation: "Proceed With Caution" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["The receiving domain of the address accepts all mail, indicating it may be a spam trap, likely due to:", _jsx("ul", Object.assign({ className: "m-y-0" }, { children: _jsx("li", { children: "Some domains do not distinguish between existing and non-existing addresses and accept all mail" }, void 0) }), void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsx(Row, { result: "Role", risk: RiskType.Medium, recommendation: "Proceed With Caution" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["Address likely is not a particular person, but rather a group or department, likely due to:", _jsx("ul", Object.assign({ className: "m-y-0" }, { children: _jsx("li", { children: "Role addresses belong to the end user and are deliverable, but include multiple end recipients as part of a larger distribution list. These kinds of addreses are usually not good for sending campaigns" }, void 0) }), void 0)] }), void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsx(Row, { result: "Unknown", risk: RiskType.Medium, recommendation: "Proceed With Caution" }, void 0), _jsx("hr", { className: Styles.divider }, void 0), _jsxs(Text, Object.assign({ size: 2, className: "m-y-2" }, { children: ["A connection problem or unresponsive SMTP server prevented validation, likely due to:", _jsxs("ul", Object.assign({ className: "m-y-0" }, { children: [_jsx("li", { children: "Unable to connect and resolve to service during SMTP connection" }, void 0), _jsx("li", { children: "Unable to successfully get a response from SMTP server" }, void 0), _jsx("li", { children: "Address was outside known result definitions and criteria and was unable to be classified" }, void 0)] }), void 0)] }), void 0)] }), void 0));
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/settings/result-definitions-modal/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ @import (reference) '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .modal {
4
+ :global(.Modal__content) {
5
+ padding-top: @spacing-0;
6
+ }
7
+
8
+ .divider {
9
+ margin: @spacing-1 @spacing-0;
10
+ border: 0;
11
+ border-bottom: 1px solid @color-neutral-60;
12
+ }
13
+
14
+ .wall {
15
+ height: 1px;
16
+ }
17
+ }
@@ -0,0 +1,14 @@
1
+ import { FC } from 'react';
2
+ export declare enum RiskType {
3
+ Medium = 0,
4
+ High = 1,
5
+ VeryHigh = 2
6
+ }
7
+ interface RowProps {
8
+ result: string;
9
+ risk: RiskType;
10
+ recommendation: string;
11
+ }
12
+ export declare const Row: FC<RowProps>;
13
+ export {};
14
+ //# sourceMappingURL=row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/result-definitions-modal/row.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,oBAAY,QAAQ;IAChB,MAAM,IAAA;IACN,IAAI,IAAA;IACJ,QAAQ,IAAA;CACX;AAcD,UAAU,QAAQ;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,GAAG,EAAE,EAAE,CAAC,QAAQ,CAkB5B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Grid, Text, Tag } from '@servicetitan/design-system';
3
+ import tokens from '@servicetitan/tokens';
4
+ export var RiskType;
5
+ (function (RiskType) {
6
+ RiskType[RiskType["Medium"] = 0] = "Medium";
7
+ RiskType[RiskType["High"] = 1] = "High";
8
+ RiskType[RiskType["VeryHigh"] = 2] = "VeryHigh";
9
+ })(RiskType || (RiskType = {}));
10
+ const riskTypeToColor = new Map([
11
+ [RiskType.Medium, 'warning'],
12
+ [RiskType.High, tokens.colorRed500],
13
+ [RiskType.VeryHigh, tokens.colorRed600],
14
+ ]);
15
+ const riskTypeToText = new Map([
16
+ [RiskType.Medium, 'Medium'],
17
+ [RiskType.High, 'High'],
18
+ [RiskType.VeryHigh, 'Very High'],
19
+ ]);
20
+ export const Row = ({ result, risk, recommendation }) => (_jsxs(Grid, Object.assign({ columns: 3, className: "m-y-1" }, { children: [_jsx(Grid.Column, { children: _jsx(Text, Object.assign({ size: 2, bold: true }, { children: result }), void 0) }, void 0), _jsx(Grid.Column, { children: _jsx(Tag, Object.assign({ color: riskTypeToColor.get(risk), compact: true }, { children: riskTypeToText.get(risk) }), void 0) }, void 0), _jsx(Grid.Column, { children: _jsx(Text, Object.assign({ size: 2, bold: true }, { children: recommendation }), void 0) }, void 0)] }), void 0));
21
+ //# sourceMappingURL=row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row.js","sourceRoot":"","sources":["../../../../src/components/settings/result-definitions-modal/row.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAE1C,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,2CAAM,CAAA;IACN,uCAAI,CAAA;IACJ,+CAAQ,CAAA;AACZ,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAmB;IAC9C,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC5B,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC;IACnC,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAmB;IAC7C,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC3B,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CACnC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,GAAG,GAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CACnE,MAAC,IAAI,kBAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAC,OAAO,iBAC/B,KAAC,IAAI,CAAC,MAAM,cACR,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,IAAI,sBACd,MAAM,YACJ,WACG,EACd,KAAC,IAAI,CAAC,MAAM,cACR,KAAC,GAAG,kBAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,sBACzC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,YACvB,WACI,EACd,KAAC,IAAI,CAAC,MAAM,cACR,KAAC,IAAI,kBAAC,IAAI,EAAE,CAAC,EAAE,IAAI,sBACd,cAAc,YACZ,WACG,aACX,CACV,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { ReactNode, FC } from 'react';
2
- interface SectionProps {
2
+ export interface SectionProps {
3
3
  title: string;
4
4
  text?: JSX.Element | string;
5
5
  children: ReactNode;
@@ -7,5 +7,4 @@ interface SectionProps {
7
7
  className?: string;
8
8
  }
9
9
  export declare const SettingsSection: FC<SectionProps>;
10
- export {};
11
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/settings-section/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAKtC,UAAU,YAAY;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,YAAY,CAoB5C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/settings-section/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAKtC,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,YAAY,CAoB5C,CAAC"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ declare const _default: {
3
+ title: string;
4
+ component: import("react").FC<import(".").SectionProps>;
5
+ parameters: {};
6
+ };
7
+ export default _default;
8
+ export declare const SettingsSection: () => JSX.Element;
9
+ //# sourceMappingURL=settings-section.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/settings-section/settings-section.stories.tsx"],"names":[],"mappings":";;;;;;AAGA,wBAIE;AAEF,eAAO,MAAM,eAAe,mBAM3B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Headline } from '@servicetitan/design-system';
3
+ import { SettingsSection as Component } from '.';
4
+ export default {
5
+ title: 'MPA Components/settings/SettingsSection',
6
+ component: Component,
7
+ parameters: {},
8
+ };
9
+ export const SettingsSection = () => {
10
+ return (_jsx(Component, Object.assign({ title: "Hey! The test" }, { children: _jsx(Headline, { children: "The body" }, void 0) }), void 0));
11
+ };
12
+ //# sourceMappingURL=settings-section.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-section.stories.js","sourceRoot":"","sources":["../../../../src/components/settings/settings-section/settings-section.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,eAAe,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAEjD,eAAe;IACX,KAAK,EAAE,yCAAyC;IAChD,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,EAAE;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAChC,OAAO,CACH,KAAC,SAAS,kBAAC,KAAK,EAAC,eAAe,gBAC5B,KAAC,QAAQ,mCAAoB,YACrB,CACf,CAAC;AACN,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/mpa-components",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "typings": "./lib/index.d.ts",
@@ -32,5 +32,5 @@
32
32
  "cli": {
33
33
  "webpack": false
34
34
  },
35
- "gitHead": "a8a8a8e9b672a2d45847991df0e23036e3810482"
35
+ "gitHead": "64c15750f23ff40c4a3b3c477873168699dc8161"
36
36
  }
@@ -0,0 +1,89 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { TableCellProps, TableState } from '@servicetitan/table';
3
+ import { InMemoryDataSource } from '@servicetitan/data-query';
4
+
5
+ import { emailValidationHoc, EmailValidationTableRecord } from '.';
6
+
7
+ type TType = 'high' | 'medium' | 'low';
8
+ type TResult = 'ok' | 'fail';
9
+
10
+ export const EmailValidation = emailValidationHoc<TType, TResult>({
11
+ resultToText: new Map([
12
+ ['ok', 'Valid'],
13
+ ['fail', 'Invalid'],
14
+ ]),
15
+ levelTypeMap: {
16
+ high: 'high',
17
+ medium: 'medium',
18
+ low: 'low',
19
+ },
20
+ levelsResultMap: new Map([
21
+ ['high', ['ok', 'fail']],
22
+ ['medium', ['ok', 'fail']],
23
+ ['high', ['ok']],
24
+ ]),
25
+ resultToTooltipText: new Map([
26
+ ['ok', 'Valid'],
27
+ ['fail', 'Invalid'],
28
+ ]),
29
+ TenantDateCell: (props: TableCellProps) => {
30
+ const value = props.dataItem[props.field!];
31
+ return <td className={props.className}>{value.toString()}</td>;
32
+ },
33
+ });
34
+
35
+ export default {
36
+ title: 'MPA Components/settings/EmailValidation',
37
+ component: EmailValidation,
38
+ parameters: {},
39
+ };
40
+
41
+ export function EmailValidationSimple() {
42
+ const [type, setType] = useState<TType>('high');
43
+ const [loading, setLoading] = useState(true);
44
+
45
+ const grid = new TableState<EmailValidationTableRecord<TResult>>({
46
+ dataSource: null,
47
+ pageSize: 15,
48
+ });
49
+
50
+ useEffect(() => {
51
+ async function load() {
52
+ if (!loading) {
53
+ return;
54
+ }
55
+ setLoading(true);
56
+ const dataSource = new InMemoryDataSource<EmailValidationTableRecord<TResult>>([
57
+ {
58
+ id: 1,
59
+ active: false,
60
+ createdOn: new Date(),
61
+ result: 'ok',
62
+ email: 'varg@vikernes.com',
63
+ dateAdded: new Date(),
64
+ },
65
+ {
66
+ id: 2,
67
+ active: true,
68
+ createdOn: new Date(),
69
+ result: 'fail',
70
+ email: 'joe@biden.com',
71
+ dateAdded: new Date(),
72
+ },
73
+ ]);
74
+ await grid.setDataSource(dataSource, true);
75
+ setLoading(false);
76
+ }
77
+ load();
78
+ });
79
+
80
+ return (
81
+ <EmailValidation
82
+ loading={loading}
83
+ resultGrid={grid}
84
+ validationRiskType={type}
85
+ setValidationRiskType={setType}
86
+ handleDownload={() => alert('downloading csv')}
87
+ />
88
+ );
89
+ }