@pega/cosmos-react-demos 3.0.0-dev.24.0 → 3.0.0-dev.27.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.
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.mocks.d.ts +51 -2
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.mocks.d.ts.map +1 -1
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.mocks.js +380 -47
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.mocks.js.map +1 -1
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.stories.d.ts +3 -1
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.stories.d.ts.map +1 -1
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.stories.jsx +206 -23
- package/jsx/build/ExpressionBuilder/ExpressionBuilder.stories.jsx.map +1 -1
- package/jsx/build/ObjectSelect/ObjectSelect.stories.d.ts.map +1 -1
- package/jsx/build/ObjectSelect/ObjectSelect.stories.jsx +16 -3
- package/jsx/build/ObjectSelect/ObjectSelect.stories.jsx.map +1 -1
- package/jsx/core/FieldGroup/FieldGroup.stories.d.ts +2 -0
- package/jsx/core/FieldGroup/FieldGroup.stories.d.ts.map +1 -1
- package/jsx/core/FieldGroup/FieldGroup.stories.jsx +12 -4
- package/jsx/core/FieldGroup/FieldGroup.stories.jsx.map +1 -1
- package/jsx/core/Link/Link.stories.d.ts.map +1 -1
- package/jsx/core/Link/Link.stories.jsx +2 -1
- package/jsx/core/Link/Link.stories.jsx.map +1 -1
- package/jsx/core/ListToolbar/ListToolbar.stories.d.ts +3 -1
- package/jsx/core/ListToolbar/ListToolbar.stories.d.ts.map +1 -1
- package/jsx/core/ListToolbar/ListToolbar.stories.jsx +15 -6
- package/jsx/core/ListToolbar/ListToolbar.stories.jsx.map +1 -1
- package/jsx/core/Modal/Modal.stories.d.ts +10 -1
- package/jsx/core/Modal/Modal.stories.d.ts.map +1 -1
- package/jsx/core/Modal/Modal.stories.jsx +33 -6
- package/jsx/core/Modal/Modal.stories.jsx.map +1 -1
- package/jsx/core/SkipLinks/SkipLinks.stories.d.ts +6 -0
- package/jsx/core/SkipLinks/SkipLinks.stories.d.ts.map +1 -0
- package/jsx/core/SkipLinks/SkipLinks.stories.jsx +29 -0
- package/jsx/core/SkipLinks/SkipLinks.stories.jsx.map +1 -0
- package/jsx/core/SkipLinks/SkipLinks.styles.d.ts +2 -0
- package/jsx/core/SkipLinks/SkipLinks.styles.d.ts.map +1 -0
- package/jsx/core/SkipLinks/SkipLinks.styles.js +16 -0
- package/jsx/core/SkipLinks/SkipLinks.styles.js.map +1 -0
- package/jsx/core/Tree/Tree.stories.d.ts.map +1 -1
- package/jsx/core/Tree/Tree.stories.jsx +14 -0
- package/jsx/core/Tree/Tree.stories.jsx.map +1 -1
- package/jsx/cs/TaskManager/TaskManager.stories.d.ts.map +1 -1
- package/jsx/cs/TaskManager/TaskManager.stories.jsx +17 -10
- package/jsx/cs/TaskManager/TaskManager.stories.jsx.map +1 -1
- package/jsx/social/Chat/Chat.mocks.d.ts +14 -1
- package/jsx/social/Chat/Chat.mocks.d.ts.map +1 -1
- package/jsx/social/Chat/Chat.mocks.js +5 -5
- package/jsx/social/Chat/Chat.mocks.js.map +1 -1
- package/jsx/social/Chat/Chat.stories.d.ts.map +1 -1
- package/jsx/social/Chat/Chat.stories.jsx +87 -7
- package/jsx/social/Chat/Chat.stories.jsx.map +1 -1
- package/jsx/social/Email/Email.mocks.d.ts +10 -1
- package/jsx/social/Email/Email.mocks.d.ts.map +1 -1
- package/jsx/social/Email/Email.mocks.jsx +12 -15
- package/jsx/social/Email/Email.mocks.jsx.map +1 -1
- package/jsx/social/Email/Email.stories.d.ts +15 -1
- package/jsx/social/Email/Email.stories.d.ts.map +1 -1
- package/jsx/social/Email/Email.stories.jsx +279 -108
- package/jsx/social/Email/Email.stories.jsx.map +1 -1
- package/jsx/tools/Clipboard/Clipboard.mocks.d.ts +2 -2
- package/jsx/tools/Clipboard/Clipboard.mocks.d.ts.map +1 -1
- package/jsx/tools/Clipboard/Clipboard.mocks.jsx +42 -43
- package/jsx/tools/Clipboard/Clipboard.mocks.jsx.map +1 -1
- package/jsx/tools/Clipboard/Clipboard.stories.d.ts.map +1 -1
- package/jsx/tools/Clipboard/Clipboard.stories.jsx +32 -31
- package/jsx/tools/Clipboard/Clipboard.stories.jsx.map +1 -1
- package/jsx/work/Details/Details.stories.d.ts.map +1 -1
- package/jsx/work/Details/Details.stories.jsx +7 -0
- package/jsx/work/Details/Details.stories.jsx.map +1 -1
- package/jsx/work/SearchResults/SearchResults.mocks.d.ts +6 -0
- package/jsx/work/SearchResults/SearchResults.mocks.d.ts.map +1 -1
- package/jsx/work/SearchResults/SearchResults.mocks.jsx +39 -38
- package/jsx/work/SearchResults/SearchResults.mocks.jsx.map +1 -1
- package/jsx/work/SearchResults/SearchResults.stories.d.ts.map +1 -1
- package/jsx/work/SearchResults/SearchResults.stories.jsx +71 -43
- package/jsx/work/SearchResults/SearchResults.stories.jsx.map +1 -1
- package/lib/build/ExpressionBuilder/ExpressionBuilder.mocks.d.ts +51 -2
- package/lib/build/ExpressionBuilder/ExpressionBuilder.mocks.d.ts.map +1 -1
- package/lib/build/ExpressionBuilder/ExpressionBuilder.mocks.js +380 -47
- package/lib/build/ExpressionBuilder/ExpressionBuilder.mocks.js.map +1 -1
- package/lib/build/ExpressionBuilder/ExpressionBuilder.stories.d.ts +3 -1
- package/lib/build/ExpressionBuilder/ExpressionBuilder.stories.d.ts.map +1 -1
- package/lib/build/ExpressionBuilder/ExpressionBuilder.stories.js +215 -26
- package/lib/build/ExpressionBuilder/ExpressionBuilder.stories.js.map +1 -1
- package/lib/build/ObjectSelect/ObjectSelect.stories.d.ts.map +1 -1
- package/lib/build/ObjectSelect/ObjectSelect.stories.js +16 -3
- package/lib/build/ObjectSelect/ObjectSelect.stories.js.map +1 -1
- package/lib/core/FieldGroup/FieldGroup.stories.d.ts +2 -0
- package/lib/core/FieldGroup/FieldGroup.stories.d.ts.map +1 -1
- package/lib/core/FieldGroup/FieldGroup.stories.js +11 -3
- package/lib/core/FieldGroup/FieldGroup.stories.js.map +1 -1
- package/lib/core/Link/Link.stories.d.ts.map +1 -1
- package/lib/core/Link/Link.stories.js +2 -1
- package/lib/core/Link/Link.stories.js.map +1 -1
- package/lib/core/ListToolbar/ListToolbar.stories.d.ts +3 -1
- package/lib/core/ListToolbar/ListToolbar.stories.d.ts.map +1 -1
- package/lib/core/ListToolbar/ListToolbar.stories.js +15 -6
- package/lib/core/ListToolbar/ListToolbar.stories.js.map +1 -1
- package/lib/core/Modal/Modal.stories.d.ts +10 -1
- package/lib/core/Modal/Modal.stories.d.ts.map +1 -1
- package/lib/core/Modal/Modal.stories.js +33 -6
- package/lib/core/Modal/Modal.stories.js.map +1 -1
- package/lib/core/SkipLinks/SkipLinks.stories.d.ts +6 -0
- package/lib/core/SkipLinks/SkipLinks.stories.d.ts.map +1 -0
- package/lib/core/SkipLinks/SkipLinks.stories.js +28 -0
- package/lib/core/SkipLinks/SkipLinks.stories.js.map +1 -0
- package/lib/core/SkipLinks/SkipLinks.styles.d.ts +2 -0
- package/lib/core/SkipLinks/SkipLinks.styles.d.ts.map +1 -0
- package/lib/core/SkipLinks/SkipLinks.styles.js +16 -0
- package/lib/core/SkipLinks/SkipLinks.styles.js.map +1 -0
- package/lib/core/Tree/Tree.stories.d.ts.map +1 -1
- package/lib/core/Tree/Tree.stories.js +16 -0
- package/lib/core/Tree/Tree.stories.js.map +1 -1
- package/lib/cs/TaskManager/TaskManager.stories.d.ts.map +1 -1
- package/lib/cs/TaskManager/TaskManager.stories.js +17 -10
- package/lib/cs/TaskManager/TaskManager.stories.js.map +1 -1
- package/lib/social/Chat/Chat.mocks.d.ts +14 -1
- package/lib/social/Chat/Chat.mocks.d.ts.map +1 -1
- package/lib/social/Chat/Chat.mocks.js +5 -5
- package/lib/social/Chat/Chat.mocks.js.map +1 -1
- package/lib/social/Chat/Chat.stories.d.ts.map +1 -1
- package/lib/social/Chat/Chat.stories.js +68 -6
- package/lib/social/Chat/Chat.stories.js.map +1 -1
- package/lib/social/Email/Email.mocks.d.ts +10 -1
- package/lib/social/Email/Email.mocks.d.ts.map +1 -1
- package/lib/social/Email/Email.mocks.js +12 -15
- package/lib/social/Email/Email.mocks.js.map +1 -1
- package/lib/social/Email/Email.stories.d.ts +15 -1
- package/lib/social/Email/Email.stories.d.ts.map +1 -1
- package/lib/social/Email/Email.stories.js +246 -85
- package/lib/social/Email/Email.stories.js.map +1 -1
- package/lib/tools/Clipboard/Clipboard.mocks.d.ts +2 -2
- package/lib/tools/Clipboard/Clipboard.mocks.d.ts.map +1 -1
- package/lib/tools/Clipboard/Clipboard.mocks.js +35 -40
- package/lib/tools/Clipboard/Clipboard.mocks.js.map +1 -1
- package/lib/tools/Clipboard/Clipboard.stories.d.ts.map +1 -1
- package/lib/tools/Clipboard/Clipboard.stories.js +40 -31
- package/lib/tools/Clipboard/Clipboard.stories.js.map +1 -1
- package/lib/work/Details/Details.stories.d.ts.map +1 -1
- package/lib/work/Details/Details.stories.js +1 -1
- package/lib/work/Details/Details.stories.js.map +1 -1
- package/lib/work/SearchResults/SearchResults.mocks.d.ts +6 -0
- package/lib/work/SearchResults/SearchResults.mocks.d.ts.map +1 -1
- package/lib/work/SearchResults/SearchResults.mocks.js +39 -38
- package/lib/work/SearchResults/SearchResults.mocks.js.map +1 -1
- package/lib/work/SearchResults/SearchResults.stories.d.ts.map +1 -1
- package/lib/work/SearchResults/SearchResults.stories.js +71 -43
- package/lib/work/SearchResults/SearchResults.stories.js.map +1 -1
- package/package.json +9 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
2
|
import { Clipboard } from '@pega/cosmos-react-tools';
|
|
3
3
|
import { treeHelpers } from '@pega/cosmos-react-core';
|
|
4
4
|
import { allNodes, childNodes, getDetailsData } from './Clipboard.mocks';
|
|
@@ -13,51 +13,52 @@ export const ClipboardViewerDemo = () => {
|
|
|
13
13
|
const [nodes, setNodes] = useState(allNodes);
|
|
14
14
|
const [currentNodeId, setCurrentNodeId] = useState(allNodes[0].id);
|
|
15
15
|
const [pageDetails, setPageDetails] = useState();
|
|
16
|
+
const timeouts = [];
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
return () => {
|
|
19
|
+
timeouts.forEach((timeout) => {
|
|
20
|
+
clearTimeout(timeout);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}, []);
|
|
16
24
|
const updatePageDetails = (id, cb) => {
|
|
17
25
|
setPageDetails({ primary: '', fields: [], loading: true });
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, 300);
|
|
26
|
+
const response = getDetailsData(id, cb);
|
|
27
|
+
timeouts.push(setTimeout(() => setPageDetails(response), 1300));
|
|
21
28
|
};
|
|
22
|
-
const
|
|
23
|
-
|
|
29
|
+
const updateActiveParentNode = (id) => {
|
|
30
|
+
setNodes(tree => treeHelpers.mapNode(tree, id, node => {
|
|
24
31
|
return {
|
|
25
32
|
...node,
|
|
26
33
|
expanded: !node.expanded,
|
|
27
34
|
loading: node.nodes?.length === 0
|
|
28
35
|
};
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
const updateNodeDetails = (id) => {
|
|
32
|
-
setCurrentNodeId(id);
|
|
33
|
-
setNodes(tree => treeHelpers.expandTo(getMappedNodes(tree, id), id));
|
|
34
|
-
updatePageDetails(id);
|
|
36
|
+
}));
|
|
35
37
|
};
|
|
36
38
|
const loadChildNodes = (id) => {
|
|
37
|
-
setTimeout(() => {
|
|
38
|
-
setNodes(tree => treeHelpers.mapNode(tree, id, node =>
|
|
39
|
-
|
|
39
|
+
timeouts.push(setTimeout(() => {
|
|
40
|
+
setNodes(tree => treeHelpers.mapNode(tree, id, node => node.nodes?.length === 0
|
|
41
|
+
? {
|
|
40
42
|
...node,
|
|
41
43
|
loading: false,
|
|
42
|
-
nodes: id === '
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
updatePageDetails(id, updateNodeDetails);
|
|
47
|
-
}
|
|
48
|
-
}, 1000);
|
|
44
|
+
nodes: id === 'D_pzPreferenceStore' ? childNodes : undefined
|
|
45
|
+
}
|
|
46
|
+
: node));
|
|
47
|
+
}, 1000));
|
|
49
48
|
};
|
|
50
|
-
const onNodeClick = (nodeId) => {
|
|
49
|
+
const onNodeClick = (nodeId, e) => {
|
|
50
|
+
const node = treeHelpers.getNode(nodes, nodeId);
|
|
51
51
|
setCurrentNodeId(nodeId);
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
setNodes(tree => getMappedNodes(tree, nodeId));
|
|
57
|
-
return ['D_creditScore', 'D_pzPreferenceStore', 'systemPage'].includes(nodeId)
|
|
58
|
-
? loadChildNodes(nodeId)
|
|
59
|
-
: setPageDetails(undefined);
|
|
52
|
+
if (node?.nodes && node?.nodes?.length >= 0) {
|
|
53
|
+
updateActiveParentNode(nodeId);
|
|
60
54
|
}
|
|
55
|
+
loadChildNodes(nodeId);
|
|
56
|
+
if (['ArrowRight', 'ArrowLeft'].includes(e.key))
|
|
57
|
+
return;
|
|
58
|
+
updatePageDetails(nodeId, id => {
|
|
59
|
+
onNodeClick(id, e);
|
|
60
|
+
setNodes(tree => treeHelpers.expandTo(tree, nodeId));
|
|
61
|
+
});
|
|
61
62
|
};
|
|
62
63
|
return (<Clipboard navigation={{
|
|
63
64
|
nodes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clipboard.stories.jsx","sourceRoot":"","sources":["../../../src/tools/Clipboard/Clipboard.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Clipboard.stories.jsx","sourceRoot":"","sources":["../../../src/tools/Clipboard/Clipboard.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Story, Meta } from '@storybook/react';\nimport { useState, MouseEvent, KeyboardEvent, useEffect } from 'react';\n\nimport { Clipboard, ClipboardProps, FieldSummaryProps } from '@pega/cosmos-react-tools';\nimport { treeHelpers } from '@pega/cosmos-react-core';\n\nimport { allNodes, childNodes, getDetailsData } from './Clipboard.mocks';\n\nexport default {\n title: 'Tools/Clipboard',\n component: Clipboard,\n parameters: {\n layout: 'fullscreen'\n }\n} as Meta;\n\nexport const ClipboardViewerDemo: Story<ClipboardProps> = () => {\n const [nodes, setNodes] = useState(allNodes);\n const [currentNodeId, setCurrentNodeId] = useState(allNodes[0].id);\n const [pageDetails, setPageDetails] = useState<FieldSummaryProps | undefined>();\n const timeouts: ReturnType<typeof setTimeout>[] = [];\n\n useEffect(() => {\n return () => {\n timeouts.forEach((timeout: ReturnType<typeof setTimeout>) => {\n clearTimeout(timeout);\n });\n };\n }, []);\n\n // Update main content based on id\n const updatePageDetails = (id: string, cb?: (id: string) => void) => {\n setPageDetails({ primary: '', fields: [], loading: true });\n const response = getDetailsData(id, cb);\n timeouts.push(setTimeout(() => setPageDetails(response), 1300));\n };\n\n // set loading and expanded to selected node if it is a parent\n const updateActiveParentNode = (id: string) => {\n setNodes(tree =>\n treeHelpers.mapNode(tree, id, node => {\n return {\n ...node,\n expanded: !node.expanded,\n loading: node.nodes?.length === 0\n };\n })\n );\n };\n\n // get child nodes for the parent and set loading to false\n const loadChildNodes = (id: string) => {\n timeouts.push(\n setTimeout(() => {\n setNodes(tree =>\n treeHelpers.mapNode(tree, id, node =>\n node.nodes?.length === 0\n ? {\n ...node,\n loading: false,\n nodes: id === 'D_pzPreferenceStore' ? childNodes : undefined\n }\n : node\n )\n );\n }, 1000)\n );\n };\n\n const onNodeClick = (nodeId: string, e: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>) => {\n // get clicked node details and set it as active\n const node = treeHelpers.getNode(nodes, nodeId);\n setCurrentNodeId(nodeId);\n\n // expand node if it is a parent and shows loading indicator for child\n if (node?.nodes && node?.nodes?.length >= 0) {\n updateActiveParentNode(nodeId);\n }\n\n // get child nodes and set new nodes to state\n loadChildNodes(nodeId);\n\n // Do not change maincontent if tree is navigated using arrow buttons\n if (['ArrowRight', 'ArrowLeft'].includes((e as KeyboardEvent).key)) return;\n\n // set main content based on active node\n updatePageDetails(nodeId, id => {\n onNodeClick(id, e);\n setNodes(tree => treeHelpers.expandTo(tree, nodeId));\n });\n };\n\n return (\n <Clipboard\n navigation={{\n nodes,\n currentNodeId,\n onNodeClick\n }}\n content={pageDetails}\n lastUpdated='Last updated: Less than a minute ago'\n />\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Details.stories.d.ts","sourceRoot":"","sources":["../../../src/work/Details/Details.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;;AAK/C,wBAMU;AAEV,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"Details.stories.d.ts","sourceRoot":"","sources":["../../../src/work/Details/Details.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;;AAK/C,wBAMU;AAEV,eAAO,MAAM,WAAW,EAAE,KA6EzB,CAAC"}
|
|
@@ -56,6 +56,13 @@ export const DetailsDemo = () => {
|
|
|
56
56
|
<FieldValueItem name='52 week high' value='$445.00'/>
|
|
57
57
|
<FieldValueItem name='52 week low' value='$335.00'/>
|
|
58
58
|
</Details>
|
|
59
|
+
|
|
60
|
+
<Details name='Collapsible' nested valueComparison collapsible>
|
|
61
|
+
<FieldValueItem name='Open' value='$205.00'/>
|
|
62
|
+
<FieldValueItem name='Close' value='$209.00'/>
|
|
63
|
+
<FieldValueItem name='52 week high' value='$312.00'/>
|
|
64
|
+
<FieldValueItem name='52 week low' value='$115.00'/>
|
|
65
|
+
</Details>
|
|
59
66
|
</Details>
|
|
60
67
|
|
|
61
68
|
<FieldValueItem name='Age' value='56'/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Details.stories.jsx","sourceRoot":"","sources":["../../../src/work/Details/Details.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Meta, Story } from '@storybook/react';\n\nimport { FieldValueItem, useBreakpoint } from '@pega/cosmos-react-core';\nimport { Details, DetailsContext } from '@pega/cosmos-react-work';\n\nexport default {\n title: 'Work/Details',\n component: Details,\n parameters: {\n layout: 'centered'\n }\n} as Meta;\n\nexport const DetailsDemo: Story = () => {\n const isNotMobile = useBreakpoint('sm');\n\n return (\n <DetailsContext.Provider value={{ mobileView: !isNotMobile, longestLabelLength: 10 }}>\n <Details\n name='Outer list'\n highlightedData={[\n <FieldValueItem variant='stacked' name='Age' value='56' />,\n <FieldValueItem variant='stacked' name='Location' value='Berlin' />,\n <FieldValueItem variant='stacked' name='Make' value='Ford' />,\n <FieldValueItem variant='stacked' name='Model' value='F150' />\n ]}\n >\n {/* Siblings can be rendered in a responsive row with the `asFlex` attribute */}\n <Details name='Nested as flex' nested asFlex>\n {/* Arbitrary recursive nesting is supported with nested attribute */}\n <Details nested>\n <Details nested>\n <FieldValueItem name='Make' value='Ford' />\n <FieldValueItem name='Model' value='F150' />\n </Details>\n </Details>\n\n <Details nested>\n <FieldValueItem name='Mileage' value='78,500' />\n <FieldValueItem name='Trim' value='Lariat' />\n </Details>\n </Details>\n\n <FieldValueItem\n name='Description'\n variant='stacked'\n value={\n <p>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse commodo nulla\n vitae mi bibendum, a fringilla nisl efficitur. Praesent vitae nulla lobortis, finibus\n felis ultricies, fermentum mi. Nunc lorem ligula, placerat nec elit id, auctor\n pellentesque est. Pellentesque pharetra justo augue, non maximus nulla venenatis et.\n Sed laoreet ultricies ullamcorper. Mauris ac nulla quis ipsum semper fringilla in eget\n risus. Fusce cursus sollicitudin nibh molestie volutpat.\n </p>\n }\n />\n\n <Details name='Nested list' nested>\n <FieldValueItem name='First name' value='Howard' />\n <FieldValueItem name='Last name' value='Kennedy' />\n\n <Details name='Deeper list' nested>\n <FieldValueItem name='Color' value='red' />\n <FieldValueItem name='Year' value='2017' />\n </Details>\n\n <Details name='Value comparison' nested valueComparison>\n <FieldValueItem\n name='Open lorem ipsum dolor set amet ipsum ket sit amet'\n value='$405,000,000.00'\n />\n <FieldValueItem name='Close' value='$401.00' />\n <FieldValueItem name='52 week high' value='$445.00' />\n <FieldValueItem name='52 week low' value='$335.00' />\n </Details>\n </Details>\n\n <FieldValueItem name='Age' value='56' />\n <FieldValueItem name='Location' value='Berlin' />\n </Details>\n </DetailsContext.Provider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Details.stories.jsx","sourceRoot":"","sources":["../../../src/work/Details/Details.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Meta, Story } from '@storybook/react';\n\nimport { FieldValueItem, useBreakpoint } from '@pega/cosmos-react-core';\nimport { Details, DetailsContext } from '@pega/cosmos-react-work';\n\nexport default {\n title: 'Work/Details',\n component: Details,\n parameters: {\n layout: 'centered'\n }\n} as Meta;\n\nexport const DetailsDemo: Story = () => {\n const isNotMobile = useBreakpoint('sm');\n\n return (\n <DetailsContext.Provider value={{ mobileView: !isNotMobile, longestLabelLength: 10 }}>\n <Details\n name='Outer list'\n highlightedData={[\n <FieldValueItem variant='stacked' name='Age' value='56' />,\n <FieldValueItem variant='stacked' name='Location' value='Berlin' />,\n <FieldValueItem variant='stacked' name='Make' value='Ford' />,\n <FieldValueItem variant='stacked' name='Model' value='F150' />\n ]}\n >\n {/* Siblings can be rendered in a responsive row with the `asFlex` attribute */}\n <Details name='Nested as flex' nested asFlex>\n {/* Arbitrary recursive nesting is supported with nested attribute */}\n <Details nested>\n <Details nested>\n <FieldValueItem name='Make' value='Ford' />\n <FieldValueItem name='Model' value='F150' />\n </Details>\n </Details>\n\n <Details nested>\n <FieldValueItem name='Mileage' value='78,500' />\n <FieldValueItem name='Trim' value='Lariat' />\n </Details>\n </Details>\n\n <FieldValueItem\n name='Description'\n variant='stacked'\n value={\n <p>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse commodo nulla\n vitae mi bibendum, a fringilla nisl efficitur. Praesent vitae nulla lobortis, finibus\n felis ultricies, fermentum mi. Nunc lorem ligula, placerat nec elit id, auctor\n pellentesque est. Pellentesque pharetra justo augue, non maximus nulla venenatis et.\n Sed laoreet ultricies ullamcorper. Mauris ac nulla quis ipsum semper fringilla in eget\n risus. Fusce cursus sollicitudin nibh molestie volutpat.\n </p>\n }\n />\n\n <Details name='Nested list' nested>\n <FieldValueItem name='First name' value='Howard' />\n <FieldValueItem name='Last name' value='Kennedy' />\n\n <Details name='Deeper list' nested>\n <FieldValueItem name='Color' value='red' />\n <FieldValueItem name='Year' value='2017' />\n </Details>\n\n <Details name='Value comparison' nested valueComparison>\n <FieldValueItem\n name='Open lorem ipsum dolor set amet ipsum ket sit amet'\n value='$405,000,000.00'\n />\n <FieldValueItem name='Close' value='$401.00' />\n <FieldValueItem name='52 week high' value='$445.00' />\n <FieldValueItem name='52 week low' value='$335.00' />\n </Details>\n\n <Details name='Collapsible' nested valueComparison collapsible>\n <FieldValueItem name='Open' value='$205.00' />\n <FieldValueItem name='Close' value='$209.00' />\n <FieldValueItem name='52 week high' value='$312.00' />\n <FieldValueItem name='52 week low' value='$115.00' />\n </Details>\n </Details>\n\n <FieldValueItem name='Age' value='56' />\n <FieldValueItem name='Location' value='Berlin' />\n </Details>\n </DetailsContext.Provider>\n );\n};\n"]}
|
|
@@ -2,6 +2,12 @@ import { Dispatch, SetStateAction } from 'react';
|
|
|
2
2
|
import { OmitStrict } from '@pega/cosmos-react-core';
|
|
3
3
|
import { SearchResultProps, SearchResultsProps } from '@pega/cosmos-react-work';
|
|
4
4
|
declare type ResultMeta = OmitStrict<SearchResultProps, 'link'>;
|
|
5
|
+
export declare const searchResults: {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
meta: (string | Date)[];
|
|
10
|
+
}[];
|
|
5
11
|
export declare const getInitialResults: (setPreview: Dispatch<SetStateAction<ResultMeta | undefined>>, setPreviewTabId: Dispatch<SetStateAction<string | undefined>>) => SearchResultProps[];
|
|
6
12
|
export declare const initialFilters: SearchResultsProps['filters'];
|
|
7
13
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchResults.mocks.d.ts","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.mocks.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAU,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAKhF,aAAK,UAAU,GAAG,UAAU,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAiBxD,eAAO,MAAM,iBAAiB,eAChB,SAAS,eAAe,UAAU,GAAG,SAAS,CAAC,CAAC,mBAC3C,SAAS,eAAe,MAAM,GAAG,SAAS,CAAC,CAAC,KAC5D,iBAAiB,
|
|
1
|
+
{"version":3,"file":"SearchResults.mocks.d.ts","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.mocks.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAU,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAKhF,aAAK,UAAU,GAAG,UAAU,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAiBxD,eAAO,MAAM,aAAa;;;;;GAqCzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAChB,SAAS,eAAe,UAAU,GAAG,SAAS,CAAC,CAAC,mBAC3C,SAAS,eAAe,MAAM,GAAG,SAAS,CAAC,CAAC,KAC5D,iBAAiB,EAOnB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAqCxD,CAAC"}
|
|
@@ -10,45 +10,46 @@ const getResultLink = (result, setPreview, setPreviewTabId) => {
|
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
+
export const searchResults = [
|
|
14
|
+
{
|
|
15
|
+
id: 'PROJ-300',
|
|
16
|
+
title: 'The Art of Building Beautiful Demos',
|
|
17
|
+
description,
|
|
18
|
+
meta: ['Completed', 'Low priority', new Date('01/01/21')]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'PROJ-123',
|
|
22
|
+
title: 'Be Single Minded',
|
|
23
|
+
description,
|
|
24
|
+
meta: ['Blocked', 'Medium priority', new Date('12/31/20')]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'PROJ-456',
|
|
28
|
+
title: 'Differentiate Yourself and Attract More Attention Sales and Profits',
|
|
29
|
+
description,
|
|
30
|
+
meta: ['Pending', 'High priority', new Date('12/01/20')]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: 'PROJ-789',
|
|
34
|
+
title: 'Importance of the Custom Test',
|
|
35
|
+
description,
|
|
36
|
+
meta: ['Completed', 'Medium priority', new Date('01/01/21 08:00:00')]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'PROJ-100',
|
|
40
|
+
title: 'Improve Your Business Cards and Enhance Your Sales',
|
|
41
|
+
description,
|
|
42
|
+
meta: ['Ready', 'High priority', new Date('12/31/20')]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'PROJ-200',
|
|
46
|
+
title: 'How to Write Better Advertising',
|
|
47
|
+
description,
|
|
48
|
+
meta: ['Ready', 'Low priority', new Date('12/25/20')]
|
|
49
|
+
}
|
|
50
|
+
];
|
|
13
51
|
export const getInitialResults = (setPreview, setPreviewTabId) => {
|
|
14
|
-
return
|
|
15
|
-
{
|
|
16
|
-
id: 'PROJ-300',
|
|
17
|
-
title: 'The Art of Building Beautiful Demos',
|
|
18
|
-
description,
|
|
19
|
-
meta: ['Completed', 'Low priority', new Date('01/01/21')]
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
id: 'PROJ-123',
|
|
23
|
-
title: 'Be Single Minded',
|
|
24
|
-
description,
|
|
25
|
-
meta: ['Blocked', 'Medium priority', new Date('12/31/20')]
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
id: 'PROJ-456',
|
|
29
|
-
title: 'Differentiate Yourself and Attract More Attention Sales and Profits',
|
|
30
|
-
description,
|
|
31
|
-
meta: ['Pending', 'High priority', new Date('12/01/20')]
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: 'PROJ-789',
|
|
35
|
-
title: 'Importance of the Custom Test',
|
|
36
|
-
description,
|
|
37
|
-
meta: ['Completed', 'Medium priority', new Date('01/01/21 08:00:00')]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
id: 'PROJ-100',
|
|
41
|
-
title: 'Improve Your Business Cards and Enhance Your Sales',
|
|
42
|
-
description,
|
|
43
|
-
meta: ['Ready', 'High priority', new Date('12/31/20')]
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
id: 'PROJ-200',
|
|
47
|
-
title: 'How to Write Better Advertising',
|
|
48
|
-
description,
|
|
49
|
-
meta: ['Ready', 'Low priority', new Date('12/25/20')]
|
|
50
|
-
}
|
|
51
|
-
].map(result => {
|
|
52
|
+
return searchResults.map(result => {
|
|
52
53
|
return {
|
|
53
54
|
...result,
|
|
54
55
|
link: getResultLink(result, setPreview, setPreviewTabId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchResults.mocks.jsx","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.mocks.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,WAAW,GACf,kXAAkX,CAAC;AAIrX,MAAM,aAAa,GAAG,CACpB,MAAkB,EAClB,UAA4D,EAC5D,eAA6D,EAC7D,EAAE;IACF,OAAO;QACL,IAAI,EAAE,YAAY,MAAM,CAAC,EAAE,EAAE;QAC7B,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,GAAG,EAAE;YACd,UAAU,CAAC,MAAM,CAAC,CAAC;YACnB,eAAe,CAAC,WAAW,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"SearchResults.mocks.jsx","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.mocks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Dispatch, SetStateAction } from 'react';\n\nimport { OmitStrict, Status } from '@pega/cosmos-react-core';\nimport { SearchResultProps, SearchResultsProps } from '@pega/cosmos-react-work';\n\nconst description =\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec semper, arcu eu sodales accumsan, ante purus fermentum dolor, ac convallis urna nisl eget lectus. Vivamus ut neque et turpis posuere pharetra imperdiet id augue. Nullam porta venenatis pharetra. Donec hendrerit, dolor eleifend vulputate tristique, dui dolor consequat ante, a vestibulum mi neque in purus.';\n\ntype ResultMeta = OmitStrict<SearchResultProps, 'link'>;\n\nconst getResultLink = (\n result: ResultMeta,\n setPreview: Dispatch<SetStateAction<ResultMeta | undefined>>,\n setPreviewTabId: Dispatch<SetStateAction<string | undefined>>\n) => {\n return {\n href: `projects/${result.id}`,\n previewable: true,\n onPreview: () => {\n setPreview(result);\n setPreviewTabId(`summary-${result.id}`);\n }\n };\n};\n\nexport const searchResults = [\n {\n id: 'PROJ-300',\n title: 'The Art of Building Beautiful Demos',\n description,\n meta: ['Completed', 'Low priority', new Date('01/01/21')]\n },\n {\n id: 'PROJ-123',\n title: 'Be Single Minded',\n description,\n meta: ['Blocked', 'Medium priority', new Date('12/31/20')]\n },\n {\n id: 'PROJ-456',\n title: 'Differentiate Yourself and Attract More Attention Sales and Profits',\n description,\n meta: ['Pending', 'High priority', new Date('12/01/20')]\n },\n {\n id: 'PROJ-789',\n title: 'Importance of the Custom Test',\n description,\n meta: ['Completed', 'Medium priority', new Date('01/01/21 08:00:00')]\n },\n {\n id: 'PROJ-100',\n title: 'Improve Your Business Cards and Enhance Your Sales',\n description,\n meta: ['Ready', 'High priority', new Date('12/31/20')]\n },\n {\n id: 'PROJ-200',\n title: 'How to Write Better Advertising',\n description,\n meta: ['Ready', 'Low priority', new Date('12/25/20')]\n }\n];\n\nexport const getInitialResults = (\n setPreview: Dispatch<SetStateAction<ResultMeta | undefined>>,\n setPreviewTabId: Dispatch<SetStateAction<string | undefined>>\n): SearchResultProps[] => {\n return searchResults.map(result => {\n return {\n ...result,\n link: getResultLink(result, setPreview, setPreviewTabId)\n };\n });\n};\n\nexport const initialFilters: SearchResultsProps['filters'] = [\n {\n type: 'select',\n name: 'Status',\n items: [\n {\n id: 'blocked',\n label: <Status variant='urgent'>Blocked</Status>,\n checked: false,\n name: 'Blocked'\n },\n {\n id: 'pending',\n label: <Status variant='pending'>Pending</Status>,\n checked: false,\n name: 'Pending'\n },\n { id: 'ready', label: <Status variant='info'>Ready</Status>, checked: false, name: 'Ready' },\n {\n id: 'completed',\n label: <Status variant='success'>Completed</Status>,\n checked: false,\n name: 'Completed'\n }\n ]\n },\n {\n type: 'select',\n selectType: 'single-select',\n name: 'Last updated',\n items: [\n { id: 'today', label: 'Today', checked: false, name: 'Today' },\n { id: 'yesterday', label: 'Yesterday', checked: false, name: 'Yesterday' },\n { id: '7-days', label: 'Last 7 days', checked: false, name: 'Last 7 days' },\n { id: '30-days', label: 'Last 30 days', checked: false, name: 'Last 30 days' }\n ]\n }\n];\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchResults.stories.d.ts","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;;AAiB/C,wBAMU;AAIV,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"SearchResults.stories.d.ts","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;;AAiB/C,wBAMU;AAIV,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,uBAAuB,CA+Q5D,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useState, useMemo } from 'react';
|
|
1
|
+
import { useEffect, useState, useMemo, useRef } from 'react';
|
|
2
2
|
import { Status, Text, Flex } from '@pega/cosmos-react-core';
|
|
3
3
|
import { CasePreview, SearchResults } from '@pega/cosmos-react-work';
|
|
4
4
|
import { AppShellDemo } from '../../core/AppShell/AppShell.stories';
|
|
@@ -19,8 +19,10 @@ export const SearchResultsDemo = (args) => {
|
|
|
19
19
|
const [filters, setFilters] = useState(initialFilters);
|
|
20
20
|
const [search, setSearch] = useState('');
|
|
21
21
|
const [limit, setLimit] = useState(2);
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
const [searchLoading, setSearchLoading] = useState(false);
|
|
23
|
+
const searchTimeoutRef = useRef();
|
|
24
|
+
const getActiveFilters = () => {
|
|
25
|
+
return filters.flatMap(group => {
|
|
24
26
|
if (group.type === 'select') {
|
|
25
27
|
return group.items.flatMap(item => {
|
|
26
28
|
if (item.checked) {
|
|
@@ -35,48 +37,71 @@ export const SearchResultsDemo = (args) => {
|
|
|
35
37
|
}
|
|
36
38
|
return [];
|
|
37
39
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
return matchesStatusFilter && matchesLastUpdatedFilter;
|
|
64
|
-
});
|
|
65
|
-
return filteredResults.filter(result => {
|
|
66
|
-
if (result &&
|
|
67
|
-
(result.description?.toLowerCase().includes(search.toLowerCase()) ||
|
|
68
|
-
result.title.toLowerCase().includes(search.toLowerCase()) ||
|
|
69
|
-
result.id.toLowerCase().includes(search.toLowerCase()))) {
|
|
70
|
-
return true;
|
|
40
|
+
};
|
|
41
|
+
const getResults = (searchStr, activeFilters) => {
|
|
42
|
+
const filteredResults = initialResults.filter(result => {
|
|
43
|
+
const statusFilterActive = activeFilters.findIndex(x => x.groupName === 'Status') !== -1;
|
|
44
|
+
const lastUpdatedFilterActive = activeFilters.findIndex(x => x.groupName === 'Last updated') !== -1;
|
|
45
|
+
let matchesStatusFilter = !statusFilterActive;
|
|
46
|
+
let matchesLastUpdatedFilter = !lastUpdatedFilterActive;
|
|
47
|
+
activeFilters.forEach(filter => {
|
|
48
|
+
result.meta?.forEach(tag => {
|
|
49
|
+
if (tag) {
|
|
50
|
+
if (!matchesStatusFilter && filter.groupName === 'Status' && tag === filter.name) {
|
|
51
|
+
matchesStatusFilter = true;
|
|
52
|
+
}
|
|
53
|
+
if (!matchesLastUpdatedFilter &&
|
|
54
|
+
filter.groupName === 'Last updated' &&
|
|
55
|
+
typeof tag === 'string' &&
|
|
56
|
+
((filter.name === 'Today' && Date.parse(tag) >= Date.parse('01/01/21')) ||
|
|
57
|
+
(filter.name === 'Yesterday' && Date.parse(tag) >= Date.parse('12/31/20')) ||
|
|
58
|
+
(filter.name === 'Last 7 days' && Date.parse(tag) >= Date.parse('12/25/20')) ||
|
|
59
|
+
(filter.name === 'Last 30 days' && Date.parse(tag) >= Date.parse('12/01/20')))) {
|
|
60
|
+
matchesLastUpdatedFilter = true;
|
|
61
|
+
}
|
|
71
62
|
}
|
|
72
|
-
return false;
|
|
73
63
|
});
|
|
74
64
|
});
|
|
65
|
+
return matchesStatusFilter && matchesLastUpdatedFilter;
|
|
66
|
+
});
|
|
67
|
+
return filteredResults.filter(result => {
|
|
68
|
+
if (result &&
|
|
69
|
+
(result.description?.toLowerCase().includes(searchStr.toLowerCase()) ||
|
|
70
|
+
result.title.toLowerCase().includes(searchStr.toLowerCase()) ||
|
|
71
|
+
result.id.toLowerCase().includes(searchStr.toLowerCase()))) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
const activeFilters = getActiveFilters();
|
|
79
|
+
if (activeFilters.length > 0 || search !== '') {
|
|
80
|
+
if (searchTimeoutRef.current)
|
|
81
|
+
clearTimeout(searchTimeoutRef.current);
|
|
82
|
+
setSearchLoading(true);
|
|
83
|
+
searchTimeoutRef.current = setTimeout(() => {
|
|
84
|
+
setResults(getResults(search, activeFilters));
|
|
85
|
+
setSearchLoading(false);
|
|
86
|
+
}, 1500);
|
|
75
87
|
}
|
|
76
88
|
else {
|
|
77
89
|
setResults([]);
|
|
78
90
|
}
|
|
79
|
-
|
|
91
|
+
return () => {
|
|
92
|
+
if (searchTimeoutRef.current)
|
|
93
|
+
clearTimeout(searchTimeoutRef.current);
|
|
94
|
+
};
|
|
95
|
+
}, [filters]);
|
|
96
|
+
const handleSearchSubmit = (value) => {
|
|
97
|
+
if (searchTimeoutRef?.current)
|
|
98
|
+
clearTimeout(searchTimeoutRef?.current);
|
|
99
|
+
setSearchLoading(true);
|
|
100
|
+
searchTimeoutRef.current = setTimeout(() => {
|
|
101
|
+
setResults(getResults(value, getActiveFilters()));
|
|
102
|
+
setSearchLoading(false);
|
|
103
|
+
}, 1500);
|
|
104
|
+
};
|
|
80
105
|
const handleFilterChange = (changeEvent) => {
|
|
81
106
|
setFilters(curr => {
|
|
82
107
|
return curr.map(filter => {
|
|
@@ -178,7 +203,12 @@ export const SearchResultsDemo = (args) => {
|
|
|
178
203
|
const searchResults = (<>
|
|
179
204
|
<SearchResults results={limit < results.length
|
|
180
205
|
? renderForDisplay(results.slice(0, limit))
|
|
181
|
-
: renderForDisplay(results)} searchInputProps={{
|
|
206
|
+
: renderForDisplay(results)} searchInputProps={{
|
|
207
|
+
value: search,
|
|
208
|
+
onSearchChange: setSearch,
|
|
209
|
+
onSearchSubmit: handleSearchSubmit,
|
|
210
|
+
searchInputAriaLabel: 'Search'
|
|
211
|
+
}} count={results.length} filters={filters} onFilterChange={handleFilterChange} onClearAllFilters={clearAllFilters} onClearFilter={handleClearFilter} onShowMore={limit < results.length ? handleShowMore : undefined} loading={searchLoading}/>
|
|
182
212
|
|
|
183
213
|
<CasePreview open={!!preview} caseId={preview?.id || ''} heading={preview?.title || ''} tabs={{
|
|
184
214
|
items: [],
|
|
@@ -191,11 +221,9 @@ export const SearchResultsDemo = (args) => {
|
|
|
191
221
|
return args.withAppShell ? (<AppShellDemo appHeader main={searchResults} searchPage/>) : (searchResults);
|
|
192
222
|
};
|
|
193
223
|
SearchResultsDemo.args = {
|
|
194
|
-
withAppShell: false
|
|
195
|
-
loading: false
|
|
224
|
+
withAppShell: false
|
|
196
225
|
};
|
|
197
226
|
SearchResultsDemo.argTypes = {
|
|
198
|
-
withAppShell: { control: { type: 'boolean' } }
|
|
199
|
-
loading: { control: { type: 'boolean' } }
|
|
227
|
+
withAppShell: { control: { type: 'boolean' } }
|
|
200
228
|
};
|
|
201
229
|
//# sourceMappingURL=SearchResults.stories.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchResults.stories.jsx","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,MAAM,EAAc,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,WAAW,EACX,aAAa,EAId,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,eAAe;IACb,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,aAAa;IACxB,UAAU,EAAE;QACV,MAAM,EAAE,YAAY;KACrB;CACM,CAAC;AASV,MAAM,CAAC,MAAM,iBAAiB,GAAmC,CAC/D,IAA6B,EAC7B,EAAE;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAA0B,CAAC;IACjE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC3B,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAChC,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,OAAO;4BACL,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,SAAS,EAAE,KAAK,CAAC,IAAI;yBACtB,CAAC;qBACH;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;aACJ;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,KAAK,EAAE,EAAE;YAC7C,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBACrD,MAAM,kBAAkB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzF,MAAM,uBAAuB,GAC3B,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;oBAEtE,IAAI,mBAAmB,GAAG,CAAC,kBAAkB,CAAC;oBAC9C,IAAI,wBAAwB,GAAG,CAAC,uBAAuB,CAAC;oBAExD,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBAC7B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;4BACzB,IAAI,GAAG,EAAE;gCACP,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,EAAE;oCAChF,mBAAmB,GAAG,IAAI,CAAC;iCAC5B;gCACD,IACE,CAAC,wBAAwB;oCACzB,MAAM,CAAC,SAAS,KAAK,cAAc;oCACnC,OAAO,GAAG,KAAK,QAAQ;oCACvB,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wCACrE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wCAC1E,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wCAC5E,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAChF;oCACA,wBAAwB,GAAG,IAAI,CAAC;iCACjC;6BACF;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,OAAO,mBAAmB,IAAI,wBAAwB,CAAC;gBACzD,CAAC,CAAC,CAAC;gBAEH,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBACrC,IACE,MAAM;wBACN,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;4BAC/D,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;4BACzD,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EACzD;wBACA,OAAO,IAAI,CAAC;qBACb;oBAED,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,UAAU,CAAC,EAAE,CAAC,CAAC;SAChB;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,MAAM,kBAAkB,GAAG,CAAC,WAAwB,EAAE,EAAE;QACtD,UAAU,CAAC,IAAI,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;gBAChC,IACE,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI;oBACnC,WAAW,CAAC,IAAI,KAAK,QAAQ;oBAC7B,SAAS,CAAC,IAAI,KAAK,QAAQ,EAC3B;oBACA,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBAC3C,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;wBAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE;4BAAE,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;6BAC7E,IAAI,SAAS,CAAC,UAAU,KAAK,eAAe;4BAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;wBAC3E,OAAO,OAAO,CAAC;oBACjB,CAAC,CAAC,CAAC;iBACJ;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,UAAU,CAAC,IAAI,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACvB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAC5B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;wBACrB,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;iBACJ;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC/C,UAAU,CAAC,IAAI,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACvB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAC1D,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;wBACrB,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;iBACJ;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CACvB,gBAA+C,EAChB,EAAE;QACjC,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACnC,IAAI,MAAM,CAAC,IAAI,EAAE;gBACf,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC,EAAE;wBAC7C,IACE,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BACpD,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BAEnD,OAAO,qBAAqB,CAAC;wBAC/B,IACE,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BACpD,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BAEnD,OAAO,oBAAoB,CAAC;wBAC9B,IACE,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BACpD,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BAEnD,OAAO,mBAAmB,CAAC;wBAC7B,IACE,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BACpD,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;4BAE5D,OAAO,eAAe,CAAC;wBACzB,OAAO,kBAAkB,CAAC;qBAC3B;oBACD,QAAQ,IAAI,EAAE;wBACZ,KAAK,WAAW;4BACd,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBACtD,KAAK,OAAO;4BACV,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;wBAC/C,KAAK,SAAS;4BACZ,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACpD,KAAK,SAAS;4BACZ,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACnD,KAAK,cAAc;4BACjB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;wBACvD,KAAK,iBAAiB;4BACpB,OAAO,CACL,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAC5D;;gBACF,EAAE,IAAI,CAAC,CACR,CAAC;wBACJ,KAAK,eAAe;4BAClB,OAAO,CACL,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAC9D;;gBACF,EAAE,IAAI,CAAC,CACR,CAAC;wBACJ;4BACE,OAAO,IAAI,CAAC;qBACf;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aAC1C;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CACpB,EACE;MAAA,CAAC,aAAa,CACZ,OAAO,CAAC,CACN,KAAK,GAAG,OAAO,CAAC,MAAM;YACpB,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAC9B,CACD,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAC/D,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CACtB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,cAAc,CAAC,CAAC,kBAAkB,CAAC,CACnC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CACnC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CACjC,UAAU,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAChE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAGxB;;MAAA,CAAC,WAAW,CACV,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAChB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAC1B,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAC9B,IAAI,CAAC,CAAC;YACJ,KAAK,EAAE,EAAE;YACT,YAAY,EAAE,YAAY,IAAI,EAAE;YAChC,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;SAC7C,CAAC,CACF,QAAQ,CACR,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC,CAC9E,aAAa,CAAC,CAAC,GAAG,EAAE;YAClB,UAAU,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,CAAC,EAEN;IAAA,GAAG,CACJ,CAAC;IAEF,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACzB,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,EAAG,CAC3D,CAAC,CAAC,CAAC,CACF,aAAa,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB,CAAC,IAAI,GAAG;IACvB,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,iBAAiB,CAAC,QAAQ,GAAG;IAC3B,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAC9C,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;CAC1C,CAAC","sourcesContent":["import { Meta, Story } from '@storybook/react';\nimport { useEffect, useState, useMemo } from 'react';\n\nimport { Status, OmitStrict, Text, Flex } from '@pega/cosmos-react-core';\nimport {\n CasePreview,\n SearchResults,\n SearchResultsProps,\n FilterEvent,\n SearchResultProps\n} from '@pega/cosmos-react-work';\n\nimport { AppShellDemo } from '../../core/AppShell/AppShell.stories';\n\nimport { getInitialResults, initialFilters } from './SearchResults.mocks';\nimport { ColoredText } from './SearchResults.styles';\n\nexport default {\n title: 'Work/SearchResults',\n component: SearchResults,\n parameters: {\n layout: 'fullscreen'\n }\n} as Meta;\n\ntype ResultMeta = OmitStrict<SearchResultProps, 'link'>;\n\ninterface SearchResultsStoryProps {\n withAppShell?: boolean;\n loading?: boolean;\n}\n\nexport const SearchResultsDemo: Story<SearchResultsStoryProps> = (\n args: SearchResultsStoryProps\n) => {\n const [preview, setPreview] = useState<undefined | ResultMeta>();\n const [previewTabId, setPreviewTabId] = useState<undefined | string>();\n const initialResults = useMemo(() => getInitialResults(setPreview, setPreviewTabId), []);\n const [results, setResults] = useState(initialResults);\n const [filters, setFilters] = useState(initialFilters);\n const [search, setSearch] = useState('');\n const [limit, setLimit] = useState(2);\n\n useEffect(() => {\n const activeFilters = filters.flatMap(group => {\n if (group.type === 'select') {\n return group.items.flatMap(item => {\n if (item.checked) {\n return {\n id: item.id,\n name: item.name,\n groupName: group.name\n };\n }\n return [];\n });\n }\n return [];\n });\n\n if (activeFilters.length > 0 || search !== '') {\n setResults(() => {\n const filteredResults = initialResults.filter(result => {\n const statusFilterActive = activeFilters.findIndex(x => x.groupName === 'Status') !== -1;\n const lastUpdatedFilterActive =\n activeFilters.findIndex(x => x.groupName === 'Last updated') !== -1;\n\n let matchesStatusFilter = !statusFilterActive;\n let matchesLastUpdatedFilter = !lastUpdatedFilterActive;\n\n activeFilters.forEach(filter => {\n result.meta?.forEach(tag => {\n if (tag) {\n if (!matchesStatusFilter && filter.groupName === 'Status' && tag === filter.name) {\n matchesStatusFilter = true;\n }\n if (\n !matchesLastUpdatedFilter &&\n filter.groupName === 'Last updated' &&\n typeof tag === 'string' &&\n ((filter.name === 'Today' && Date.parse(tag) >= Date.parse('01/01/21')) ||\n (filter.name === 'Yesterday' && Date.parse(tag) >= Date.parse('12/31/20')) ||\n (filter.name === 'Last 7 days' && Date.parse(tag) >= Date.parse('12/25/20')) ||\n (filter.name === 'Last 30 days' && Date.parse(tag) >= Date.parse('12/01/20')))\n ) {\n matchesLastUpdatedFilter = true;\n }\n }\n });\n });\n\n return matchesStatusFilter && matchesLastUpdatedFilter;\n });\n\n return filteredResults.filter(result => {\n if (\n result &&\n (result.description?.toLowerCase().includes(search.toLowerCase()) ||\n result.title.toLowerCase().includes(search.toLowerCase()) ||\n result.id.toLowerCase().includes(search.toLowerCase()))\n ) {\n return true;\n }\n\n return false;\n });\n });\n } else {\n setResults([]);\n }\n }, [search, filters]);\n\n const handleFilterChange = (changeEvent: FilterEvent) => {\n setFilters(curr => {\n return curr.map(filter => {\n const newFilter = { ...filter };\n if (\n newFilter.name === changeEvent.name &&\n changeEvent.type === 'select' &&\n newFilter.type === 'select'\n ) {\n newFilter.items = newFilter.items.map(item => {\n const newItem = { ...item };\n if (item.id === changeEvent.value.id) newItem.checked = changeEvent.value.checked;\n else if (newFilter.selectType === 'single-select') newItem.checked = false;\n return newItem;\n });\n }\n return newFilter;\n });\n });\n };\n\n const clearAllFilters = () => {\n setFilters(curr => {\n return curr.map(filter => {\n if (filter.type === 'select') {\n filter.items = filter.items.map(item => {\n item.checked = false;\n return item;\n });\n }\n return filter;\n });\n });\n };\n\n const handleClearFilter = (filterName: string) => {\n setFilters(curr => {\n return curr.map(filter => {\n if (filter.name === filterName && filter.type === 'select') {\n filter.items = filter.items.map(item => {\n item.checked = false;\n return item;\n });\n }\n return filter;\n });\n });\n };\n\n const handleShowMore = () => {\n if (limit < results.length) setLimit(curr => curr + 2);\n };\n\n const renderForDisplay = (\n resultsToDisplay: SearchResultsProps['results']\n ): SearchResultsProps['results'] => {\n return resultsToDisplay.map(result => {\n if (result.meta) {\n const metaValues = [...result.meta];\n const renderedMeta = metaValues.map(item => {\n if (!Number.isNaN(Date.parse(item as string))) {\n if (\n Date.parse(item as string) >= Date.parse('12/01/20') &&\n Date.parse(item as string) < Date.parse('12/25/20')\n )\n return 'Updated 1 month ago';\n if (\n Date.parse(item as string) >= Date.parse('12/25/20') &&\n Date.parse(item as string) < Date.parse('12/31/20')\n )\n return 'Updated 1 week ago';\n if (\n Date.parse(item as string) >= Date.parse('12/31/20') &&\n Date.parse(item as string) < Date.parse('01/01/21')\n )\n return 'Updated yesterday';\n if (\n Date.parse(item as string) >= Date.parse('01/01/21') &&\n Date.parse(item as string) < Date.parse('01/01/21 07:00:00')\n )\n return 'Updated today';\n return 'Updated just now';\n }\n switch (item) {\n case 'Completed':\n return <Status variant='success'>Completed</Status>;\n case 'Ready':\n return <Status variant='info'>Ready</Status>;\n case 'Pending':\n return <Status variant='pending'>Pending</Status>;\n case 'Blocked':\n return <Status variant='urgent'>Blocked</Status>;\n case 'Low priority':\n return <Text variant='secondary'>Low priority</Text>;\n case 'Medium priority':\n return (\n <Text as={ColoredText} colorVariant='warn' variant='secondary'>\n Medium priority\n </Text>\n );\n case 'High priority':\n return (\n <Text as={ColoredText} colorVariant='urgent' variant='secondary'>\n High priority\n </Text>\n );\n default:\n return item;\n }\n });\n return { ...result, meta: renderedMeta };\n }\n return result;\n });\n };\n\n const searchResults = (\n <>\n <SearchResults\n results={\n limit < results.length\n ? renderForDisplay(results.slice(0, limit))\n : renderForDisplay(results)\n }\n searchInputProps={{ value: search, onSearchChange: setSearch }}\n count={results.length}\n filters={filters}\n onFilterChange={handleFilterChange}\n onClearAllFilters={clearAllFilters}\n onClearFilter={handleClearFilter}\n onShowMore={limit < results.length ? handleShowMore : undefined}\n loading={args.loading}\n />\n\n <CasePreview\n open={!!preview}\n caseId={preview?.id || ''}\n heading={preview?.title || ''}\n tabs={{\n items: [],\n currentTabId: previewTabId || '',\n onClick: (id: string) => setPreviewTabId(id)\n }}\n followed\n summary={preview && <Flex container={{ pad: 2 }}>{preview.description}</Flex>}\n onBeforeClose={() => {\n setPreview(undefined);\n }}\n />\n </>\n );\n\n return args.withAppShell ? (\n <AppShellDemo appHeader main={searchResults} searchPage />\n ) : (\n searchResults\n );\n};\n\nSearchResultsDemo.args = {\n withAppShell: false,\n loading: false\n};\n\nSearchResultsDemo.argTypes = {\n withAppShell: { control: { type: 'boolean' } },\n loading: { control: { type: 'boolean' } }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"SearchResults.stories.jsx","sourceRoot":"","sources":["../../../src/work/SearchResults/SearchResults.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Meta, Story } from '@storybook/react';\nimport { useEffect, useState, useMemo, useRef } from 'react';\n\nimport { Status, OmitStrict, Text, Flex } from '@pega/cosmos-react-core';\nimport {\n CasePreview,\n SearchResults,\n SearchResultsProps,\n FilterEvent,\n SearchResultProps\n} from '@pega/cosmos-react-work';\n\nimport { AppShellDemo } from '../../core/AppShell/AppShell.stories';\n\nimport { getInitialResults, initialFilters } from './SearchResults.mocks';\nimport { ColoredText } from './SearchResults.styles';\n\nexport default {\n title: 'Work/SearchResults',\n component: SearchResults,\n parameters: {\n layout: 'fullscreen'\n }\n} as Meta;\n\ntype ResultMeta = OmitStrict<SearchResultProps, 'link'>;\n\ninterface SearchResultsStoryProps {\n withAppShell?: boolean;\n loading?: boolean;\n}\n\nexport const SearchResultsDemo: Story<SearchResultsStoryProps> = (\n args: SearchResultsStoryProps\n) => {\n const [preview, setPreview] = useState<undefined | ResultMeta>();\n const [previewTabId, setPreviewTabId] = useState<undefined | string>();\n const initialResults = useMemo(() => getInitialResults(setPreview, setPreviewTabId), []);\n const [results, setResults] = useState(initialResults);\n const [filters, setFilters] = useState(initialFilters);\n const [search, setSearch] = useState('');\n const [limit, setLimit] = useState(2);\n const [searchLoading, setSearchLoading] = useState(false);\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n const getActiveFilters = () => {\n return filters.flatMap(group => {\n if (group.type === 'select') {\n return group.items.flatMap(item => {\n if (item.checked) {\n return {\n id: item.id,\n name: item.name,\n groupName: group.name\n };\n }\n return [];\n });\n }\n return [];\n });\n };\n\n const getResults = (\n searchStr: string,\n activeFilters: { groupName: string; name: string; id: string }[]\n ) => {\n const filteredResults = initialResults.filter(result => {\n const statusFilterActive = activeFilters.findIndex(x => x.groupName === 'Status') !== -1;\n const lastUpdatedFilterActive =\n activeFilters.findIndex(x => x.groupName === 'Last updated') !== -1;\n\n let matchesStatusFilter = !statusFilterActive;\n let matchesLastUpdatedFilter = !lastUpdatedFilterActive;\n\n activeFilters.forEach(filter => {\n result.meta?.forEach(tag => {\n if (tag) {\n if (!matchesStatusFilter && filter.groupName === 'Status' && tag === filter.name) {\n matchesStatusFilter = true;\n }\n if (\n !matchesLastUpdatedFilter &&\n filter.groupName === 'Last updated' &&\n typeof tag === 'string' &&\n ((filter.name === 'Today' && Date.parse(tag) >= Date.parse('01/01/21')) ||\n (filter.name === 'Yesterday' && Date.parse(tag) >= Date.parse('12/31/20')) ||\n (filter.name === 'Last 7 days' && Date.parse(tag) >= Date.parse('12/25/20')) ||\n (filter.name === 'Last 30 days' && Date.parse(tag) >= Date.parse('12/01/20')))\n ) {\n matchesLastUpdatedFilter = true;\n }\n }\n });\n });\n\n return matchesStatusFilter && matchesLastUpdatedFilter;\n });\n\n return filteredResults.filter(result => {\n if (\n result &&\n (result.description?.toLowerCase().includes(searchStr.toLowerCase()) ||\n result.title.toLowerCase().includes(searchStr.toLowerCase()) ||\n result.id.toLowerCase().includes(searchStr.toLowerCase()))\n ) {\n return true;\n }\n\n return false;\n });\n };\n\n useEffect(() => {\n const activeFilters = getActiveFilters();\n\n if (activeFilters.length > 0 || search !== '') {\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\n setSearchLoading(true);\n searchTimeoutRef.current = setTimeout(() => {\n setResults(getResults(search, activeFilters));\n setSearchLoading(false);\n }, 1500);\n } else {\n setResults([]);\n }\n\n return () => {\n if (searchTimeoutRef.current) clearTimeout(searchTimeoutRef.current);\n };\n }, [filters]);\n\n const handleSearchSubmit = (value: string) => {\n if (searchTimeoutRef?.current) clearTimeout(searchTimeoutRef?.current);\n setSearchLoading(true);\n searchTimeoutRef.current = setTimeout(() => {\n setResults(getResults(value, getActiveFilters()));\n setSearchLoading(false);\n }, 1500);\n };\n\n const handleFilterChange = (changeEvent: FilterEvent) => {\n setFilters(curr => {\n return curr.map(filter => {\n const newFilter = { ...filter };\n if (\n newFilter.name === changeEvent.name &&\n changeEvent.type === 'select' &&\n newFilter.type === 'select'\n ) {\n newFilter.items = newFilter.items.map(item => {\n const newItem = { ...item };\n if (item.id === changeEvent.value.id) newItem.checked = changeEvent.value.checked;\n else if (newFilter.selectType === 'single-select') newItem.checked = false;\n return newItem;\n });\n }\n return newFilter;\n });\n });\n };\n\n const clearAllFilters = () => {\n setFilters(curr => {\n return curr.map(filter => {\n if (filter.type === 'select') {\n filter.items = filter.items.map(item => {\n item.checked = false;\n return item;\n });\n }\n return filter;\n });\n });\n };\n\n const handleClearFilter = (filterName: string) => {\n setFilters(curr => {\n return curr.map(filter => {\n if (filter.name === filterName && filter.type === 'select') {\n filter.items = filter.items.map(item => {\n item.checked = false;\n return item;\n });\n }\n return filter;\n });\n });\n };\n\n const handleShowMore = () => {\n if (limit < results.length) setLimit(curr => curr + 2);\n };\n\n const renderForDisplay = (\n resultsToDisplay: SearchResultsProps['results']\n ): SearchResultsProps['results'] => {\n return resultsToDisplay.map(result => {\n if (result.meta) {\n const metaValues = [...result.meta];\n const renderedMeta = metaValues.map(item => {\n if (!Number.isNaN(Date.parse(item as string))) {\n if (\n Date.parse(item as string) >= Date.parse('12/01/20') &&\n Date.parse(item as string) < Date.parse('12/25/20')\n )\n return 'Updated 1 month ago';\n if (\n Date.parse(item as string) >= Date.parse('12/25/20') &&\n Date.parse(item as string) < Date.parse('12/31/20')\n )\n return 'Updated 1 week ago';\n if (\n Date.parse(item as string) >= Date.parse('12/31/20') &&\n Date.parse(item as string) < Date.parse('01/01/21')\n )\n return 'Updated yesterday';\n if (\n Date.parse(item as string) >= Date.parse('01/01/21') &&\n Date.parse(item as string) < Date.parse('01/01/21 07:00:00')\n )\n return 'Updated today';\n return 'Updated just now';\n }\n switch (item) {\n case 'Completed':\n return <Status variant='success'>Completed</Status>;\n case 'Ready':\n return <Status variant='info'>Ready</Status>;\n case 'Pending':\n return <Status variant='pending'>Pending</Status>;\n case 'Blocked':\n return <Status variant='urgent'>Blocked</Status>;\n case 'Low priority':\n return <Text variant='secondary'>Low priority</Text>;\n case 'Medium priority':\n return (\n <Text as={ColoredText} colorVariant='warn' variant='secondary'>\n Medium priority\n </Text>\n );\n case 'High priority':\n return (\n <Text as={ColoredText} colorVariant='urgent' variant='secondary'>\n High priority\n </Text>\n );\n default:\n return item;\n }\n });\n return { ...result, meta: renderedMeta };\n }\n return result;\n });\n };\n\n const searchResults = (\n <>\n <SearchResults\n results={\n limit < results.length\n ? renderForDisplay(results.slice(0, limit))\n : renderForDisplay(results)\n }\n searchInputProps={{\n value: search,\n onSearchChange: setSearch,\n onSearchSubmit: handleSearchSubmit,\n searchInputAriaLabel: 'Search'\n }}\n count={results.length}\n filters={filters}\n onFilterChange={handleFilterChange}\n onClearAllFilters={clearAllFilters}\n onClearFilter={handleClearFilter}\n onShowMore={limit < results.length ? handleShowMore : undefined}\n loading={searchLoading}\n />\n\n <CasePreview\n open={!!preview}\n caseId={preview?.id || ''}\n heading={preview?.title || ''}\n tabs={{\n items: [],\n currentTabId: previewTabId || '',\n onClick: (id: string) => setPreviewTabId(id)\n }}\n followed\n summary={preview && <Flex container={{ pad: 2 }}>{preview.description}</Flex>}\n onBeforeClose={() => {\n setPreview(undefined);\n }}\n />\n </>\n );\n\n return args.withAppShell ? (\n <AppShellDemo appHeader main={searchResults} searchPage />\n ) : (\n searchResults\n );\n};\n\nSearchResultsDemo.args = {\n withAppShell: false\n};\n\nSearchResultsDemo.argTypes = {\n withAppShell: { control: { type: 'boolean' } }\n};\n"]}
|