@vendorflow/components 2.0.45 → 2.0.49
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/lib/TempHooks.d.ts +9 -0
- package/lib/TempHooks.js +25 -0
- package/lib/components/InfiniteScroll/InfiniteScroll.d.ts +16 -0
- package/lib/components/InfiniteScroll/InfiniteScroll.js +159 -0
- package/lib/components/InfiniteScroll/index.d.ts +1 -0
- package/lib/components/InfiniteScroll/index.js +8 -0
- package/lib/components/blueprint/InputGroup/InputGroup.d.ts +20 -0
- package/lib/components/blueprint/InputGroup/InputGroup.js +13 -0
- package/lib/components/blueprint/InputGroup/InputGroup.story.d.ts +2 -0
- package/lib/components/blueprint/InputGroup/InputGroup.story.js +11 -0
- package/lib/components/blueprint/InputGroup/index.d.ts +1 -0
- package/lib/components/blueprint/InputGroup/index.js +4 -0
- package/lib/components/blueprint/InputSelect/InputSelect.d.ts +51 -0
- package/lib/components/blueprint/InputSelect/InputSelect.js +98 -0
- package/lib/components/blueprint/InputSelect/InputSelect.story.d.ts +3 -0
- package/lib/components/blueprint/InputSelect/InputSelect.story.js +19 -0
- package/lib/components/blueprint/InputSelect/index.d.ts +1 -0
- package/lib/components/blueprint/InputSelect/index.js +4 -0
- package/lib/components/blueprint/InputTime/InputTime.d.ts +24 -0
- package/lib/components/blueprint/InputTime/InputTime.js +28 -0
- package/lib/components/blueprint/InputTime/InputTime.story.d.ts +2 -0
- package/lib/components/blueprint/InputTime/InputTime.story.js +11 -0
- package/lib/components/blueprint/InputTime/index.d.ts +1 -0
- package/lib/components/blueprint/InputTime/index.js +4 -0
- package/lib/components/material-ui/ChatInterface/ActionsMenu.d.ts +4 -0
- package/lib/components/material-ui/ChatInterface/ActionsMenu.js +42 -0
- package/lib/components/material-ui/ChatInterface/ChatInterface.story.js +12 -1
- package/lib/components/material-ui/ChatInterface/MessageInput.js +6 -2
- package/lib/components/material-ui/ChatInterface/MessageItem.js +3 -2
- package/lib/services/Select.service.d.ts +5 -0
- package/lib/services/Select.service.js +67 -0
- package/package.json +4 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
interface UseInfiniteScrollProps {
|
|
3
|
+
parentEl?: RefObject<HTMLDivElement>;
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
hasMore?: boolean;
|
|
6
|
+
loadMore?: () => Promise<void> | void;
|
|
7
|
+
}
|
|
8
|
+
export declare function useInfiniteScroll({ parentEl, isLoading, hasMore, loadMore }: UseInfiniteScrollProps): (node: any) => void;
|
|
9
|
+
export {};
|
package/lib/TempHooks.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useInfiniteScroll = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
function useInfiniteScroll(_a) {
|
|
6
|
+
var parentEl = _a.parentEl, isLoading = _a.isLoading, hasMore = _a.hasMore, loadMore = _a.loadMore;
|
|
7
|
+
var observer = (0, react_1.useRef)();
|
|
8
|
+
return (0, react_1.useCallback)(function (node) {
|
|
9
|
+
if (isLoading)
|
|
10
|
+
return;
|
|
11
|
+
if (observer.current)
|
|
12
|
+
observer.current.disconnect();
|
|
13
|
+
observer.current = new IntersectionObserver(function (entries) {
|
|
14
|
+
if (entries[0].isIntersecting && hasMore && loadMore) {
|
|
15
|
+
loadMore();
|
|
16
|
+
}
|
|
17
|
+
}, {
|
|
18
|
+
root: (parentEl === null || parentEl === void 0 ? void 0 : parentEl.current) || null,
|
|
19
|
+
threshold: 1.0,
|
|
20
|
+
});
|
|
21
|
+
if (node)
|
|
22
|
+
observer.current.observe(node);
|
|
23
|
+
}, [isLoading, hasMore, loadMore, parentEl]);
|
|
24
|
+
}
|
|
25
|
+
exports.useInfiniteScroll = useInfiniteScroll;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** @jsxRuntime classic */
|
|
2
|
+
/** @jsx jsx */
|
|
3
|
+
import { jsx } from '@emotion/react';
|
|
4
|
+
import { MutableRefObject, ReactElement } from 'react';
|
|
5
|
+
interface Props {
|
|
6
|
+
children: ReactElement[];
|
|
7
|
+
scrollParent: MutableRefObject<HTMLDivElement | null>;
|
|
8
|
+
isLoading?: boolean;
|
|
9
|
+
isFetching?: boolean;
|
|
10
|
+
isReverse?: boolean;
|
|
11
|
+
hasNextPage?: boolean;
|
|
12
|
+
fetchNextPage?: () => Promise<any> | any;
|
|
13
|
+
Loader?: ReactElement;
|
|
14
|
+
}
|
|
15
|
+
export default function InfiniteScroll({ children, scrollParent, isLoading, isFetching, isReverse, hasNextPage, fetchNextPage, Loader, }: Props): jsx.JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
7
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
8
|
+
if (!m) return o;
|
|
9
|
+
var i = m.call(o), r, ar = [], e;
|
|
10
|
+
try {
|
|
11
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
12
|
+
}
|
|
13
|
+
catch (error) { e = { error: error }; }
|
|
14
|
+
finally {
|
|
15
|
+
try {
|
|
16
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
17
|
+
}
|
|
18
|
+
finally { if (e) throw e.error; }
|
|
19
|
+
}
|
|
20
|
+
return ar;
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
/** @jsxRuntime classic */
|
|
24
|
+
/** @jsx jsx */
|
|
25
|
+
var react_1 = require("@emotion/react");
|
|
26
|
+
var react_2 = require("react");
|
|
27
|
+
var material_1 = require("@mui/material");
|
|
28
|
+
function InfiniteScroll(_a) {
|
|
29
|
+
var children = _a.children, scrollParent = _a.scrollParent, isLoading = _a.isLoading, isFetching = _a.isFetching, isReverse = _a.isReverse, hasNextPage = _a.hasNextPage, fetchNextPage = _a.fetchNextPage, Loader = _a.Loader;
|
|
30
|
+
var _b = __read((0, react_2.useState)(false), 2), isLoadMoreFetch = _b[0], setLoadMoreFetch = _b[1];
|
|
31
|
+
var scrollBody = (0, react_2.useRef)(null);
|
|
32
|
+
var loadMoreRef = useInfiniteScroll({
|
|
33
|
+
scrollParent: scrollParent,
|
|
34
|
+
scrollBody: scrollBody,
|
|
35
|
+
isReverse: isReverse,
|
|
36
|
+
isLoading: isLoading,
|
|
37
|
+
isFetching: isFetching,
|
|
38
|
+
hasNextPage: hasNextPage,
|
|
39
|
+
fetchNextPage: fetchNextPageAndSetFlag,
|
|
40
|
+
});
|
|
41
|
+
(0, react_2.useEffect)(function () {
|
|
42
|
+
if (!isFetching) {
|
|
43
|
+
setLoadMoreFetch(false);
|
|
44
|
+
}
|
|
45
|
+
}, [isFetching]);
|
|
46
|
+
function fetchNextPageAndSetFlag() {
|
|
47
|
+
if (fetchNextPage) {
|
|
48
|
+
fetchNextPage();
|
|
49
|
+
setLoadMoreFetch(true);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function renderLoader() {
|
|
53
|
+
if (!hasNextPage) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
if (Loader) {
|
|
57
|
+
return ((0, react_1.jsx)(react_1.ClassNames, null, function (_a) {
|
|
58
|
+
var css = _a.css;
|
|
59
|
+
return (0, react_2.cloneElement)(Loader, {
|
|
60
|
+
ref: loadMoreRef,
|
|
61
|
+
className: css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n && {\n visibility: ", ";\n }\n "], ["\n && {\n visibility: ", ";\n }\n "])), isFetching && isLoadMoreFetch ? 'visible' : 'hidden'),
|
|
62
|
+
});
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return ((0, react_1.jsx)(DefaultLoader, { css: (0, react_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n && {\n visibility: ", ";\n }\n "], ["\n && {\n visibility: ", ";\n }\n "])), isFetching && isLoadMoreFetch ? 'visible' : 'hidden'), ref: loadMoreRef }));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return ((0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: ", ";\n justify-content: flex-start;\n align-items: flex-start;\n "], ["\n display: flex;\n flex-direction: ", ";\n justify-content: flex-start;\n align-items: flex-start;\n "])), isReverse ? 'column-reverse' : 'column'), ref: scrollBody },
|
|
70
|
+
children,
|
|
71
|
+
renderLoader()));
|
|
72
|
+
}
|
|
73
|
+
exports.default = InfiniteScroll;
|
|
74
|
+
var DefaultLoader = (0, react_2.forwardRef)(function (_a, ref) {
|
|
75
|
+
var className = _a.className, style = _a.style;
|
|
76
|
+
return ((0, react_1.jsx)("div", { key: "loader", className: className, style: style, ref: ref, css: (0, react_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n width: 100%;\n margin: 0.5rem 0;\n height: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n "], ["\n width: 100%;\n margin: 0.5rem 0;\n height: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n "]))) },
|
|
77
|
+
(0, react_1.jsx)(material_1.CircularProgress, { size: "1.5rem", disableShrink: true })));
|
|
78
|
+
});
|
|
79
|
+
function useInfiniteScroll(_a) {
|
|
80
|
+
var _b, _c, _d, _e;
|
|
81
|
+
var scrollParent = _a.scrollParent, scrollBody = _a.scrollBody, isLoading = _a.isLoading, isFetching = _a.isFetching, isReverse = _a.isReverse, hasNextPage = _a.hasNextPage, fetchNextPage = _a.fetchNextPage;
|
|
82
|
+
var prevPosition = (0, react_2.useRef)();
|
|
83
|
+
var observer = (0, react_2.useRef)();
|
|
84
|
+
var _f = __read((0, react_2.useState)(false), 2), isScrollInit = _f[0], setScrollInit = _f[1];
|
|
85
|
+
var _g = __read((0, react_2.useState)(false), 2), isScrollLoad = _g[0], setScrollLoad = _g[1];
|
|
86
|
+
var hasScrollbar = (0, react_2.useMemo)(function () {
|
|
87
|
+
if (scrollParent.current && scrollBody.current) {
|
|
88
|
+
return scrollBody.current.clientHeight > scrollParent.current.clientHeight;
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}, [(_b = scrollParent.current) === null || _b === void 0 ? void 0 : _b.clientHeight, (_c = scrollBody.current) === null || _c === void 0 ? void 0 : _c.clientHeight]);
|
|
92
|
+
// Ensures that when the chat initializes, it will scroll to the bottom
|
|
93
|
+
(0, react_2.useEffect)(function () {
|
|
94
|
+
if (!isLoading && hasScrollbar) {
|
|
95
|
+
prevPosition.current = null;
|
|
96
|
+
setScrollLoad(false);
|
|
97
|
+
scrollToStart();
|
|
98
|
+
}
|
|
99
|
+
}, [isLoading, hasScrollbar]);
|
|
100
|
+
// If a fetch happens that was not started by a scroll action (aka fetchNextPage),
|
|
101
|
+
// then this will track the prevPosition
|
|
102
|
+
(0, react_2.useEffect)(function () {
|
|
103
|
+
if (!isScrollLoad && scrollBody.current && isFetching) {
|
|
104
|
+
prevPosition.current = scrollBody.current.clientHeight;
|
|
105
|
+
}
|
|
106
|
+
}, [isFetching, isScrollLoad, (_d = scrollBody.current) === null || _d === void 0 ? void 0 : _d.clientHeight]);
|
|
107
|
+
// This will potentially scroll the page to the start when the page loads new data that did not
|
|
108
|
+
// originate from a fetchNextPage action
|
|
109
|
+
(0, react_2.useEffect)(function () {
|
|
110
|
+
if (!isScrollLoad &&
|
|
111
|
+
isReverse &&
|
|
112
|
+
scrollBody.current &&
|
|
113
|
+
prevPosition.current != null &&
|
|
114
|
+
scrollBody.current.clientHeight - prevPosition.current <= 200) {
|
|
115
|
+
prevPosition.current = null;
|
|
116
|
+
scrollToStart();
|
|
117
|
+
}
|
|
118
|
+
}, [isScrollLoad, (_e = scrollBody.current) === null || _e === void 0 ? void 0 : _e.clientHeight]);
|
|
119
|
+
function scrollToStart() {
|
|
120
|
+
var _a;
|
|
121
|
+
var scrollHeight = (scrollBody.current || { scrollHeight: 0 }).scrollHeight;
|
|
122
|
+
var scrollToValue = isReverse ? scrollHeight : 0;
|
|
123
|
+
(_a = scrollParent.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0, scrollToValue);
|
|
124
|
+
setScrollInit(true);
|
|
125
|
+
}
|
|
126
|
+
// this callback is used and fired based on the state of the element it is attached to
|
|
127
|
+
return (0, react_2.useCallback)(function (node) {
|
|
128
|
+
if (isLoading || isFetching) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (observer.current) {
|
|
132
|
+
observer.current.disconnect();
|
|
133
|
+
}
|
|
134
|
+
observer.current = new IntersectionObserver(function (entries) {
|
|
135
|
+
if (entries[0].isIntersecting && hasNextPage && fetchNextPage) {
|
|
136
|
+
if (scrollBody.current && isReverse && isScrollInit) {
|
|
137
|
+
// save the last element, so that we can scroll to it after the new data loads in
|
|
138
|
+
prevPosition.current = scrollBody.current.clientHeight;
|
|
139
|
+
}
|
|
140
|
+
// load the next page
|
|
141
|
+
fetchNextPage();
|
|
142
|
+
setScrollLoad(true);
|
|
143
|
+
}
|
|
144
|
+
}, {
|
|
145
|
+
root: (scrollParent === null || scrollParent === void 0 ? void 0 : scrollParent.current) || null,
|
|
146
|
+
threshold: 1.0,
|
|
147
|
+
});
|
|
148
|
+
if (node) {
|
|
149
|
+
if (isReverse && scrollParent.current && prevPosition.current != null && isScrollLoad) {
|
|
150
|
+
// If we had a prev position, then we want to scroll to it
|
|
151
|
+
scrollParent.current.scrollTo(0, scrollBody.current.clientHeight - prevPosition.current);
|
|
152
|
+
prevPosition.current = null;
|
|
153
|
+
setScrollLoad(false);
|
|
154
|
+
}
|
|
155
|
+
observer.current.observe(node);
|
|
156
|
+
}
|
|
157
|
+
}, [isLoading, isFetching, isReverse, hasNextPage, fetchNextPage, scrollParent, scrollBody, isScrollInit, isScrollLoad]);
|
|
158
|
+
}
|
|
159
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './InfiniteScroll';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var InfiniteScroll_1 = require("./InfiniteScroll");
|
|
8
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(InfiniteScroll_1).default; } });
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChangeEvent } from 'react';
|
|
2
|
+
import { IIntentProps, IInputGroupProps } from '@blueprintjs/core';
|
|
3
|
+
interface Props {
|
|
4
|
+
id?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
fill?: boolean;
|
|
8
|
+
helperText?: string;
|
|
9
|
+
intent?: IIntentProps['intent'];
|
|
10
|
+
label?: string;
|
|
11
|
+
labelInfo?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
onChange: (evt: ChangeEvent<HTMLInputElement>) => void;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
type?: string;
|
|
16
|
+
value: IInputGroupProps['value'];
|
|
17
|
+
hideCharCount?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export default function InputGroup(props: Props): JSX.Element;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var core_1 = require("@blueprintjs/core");
|
|
8
|
+
function InputGroup(props) {
|
|
9
|
+
var id = props.id, className = props.className, disabled = props.disabled, fill = props.fill, helperText = props.helperText, intent = props.intent, label = props.label, labelInfo = props.labelInfo, name = props.name, onChange = props.onChange, placeholder = props.placeholder, _a = props.type, type = _a === void 0 ? 'text' : _a, value = props.value;
|
|
10
|
+
return (react_1.default.createElement(core_1.FormGroup, { className: className, helperText: helperText, intent: intent, label: label, labelFor: id, labelInfo: labelInfo, disabled: disabled },
|
|
11
|
+
react_1.default.createElement(core_1.InputGroup, { fill: fill, id: id, intent: intent, name: name, onChange: onChange, placeholder: placeholder, type: type, value: value })));
|
|
12
|
+
}
|
|
13
|
+
exports.default = InputGroup;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var addon_actions_1 = require("@storybook/addon-actions");
|
|
8
|
+
var InputGroup_1 = __importDefault(require("./InputGroup"));
|
|
9
|
+
exports.InputGroup = function () {
|
|
10
|
+
return (react_1.default.createElement(InputGroup_1.default, { name: "name", label: "First Name", labelInfo: "(required)", value: "", intent: "danger", onChange: addon_actions_1.action('changed') }));
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './InputGroup';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { IIntentProps } from '@blueprintjs/core';
|
|
3
|
+
import { ItemRenderer } from '@blueprintjs/select';
|
|
4
|
+
import { SimpleEvent, InputValueRender, TagRender } from '../../../types/Component.types';
|
|
5
|
+
declare type Props<T> = InputSuggestProps<T> | InputMultiSelectProps<T>;
|
|
6
|
+
declare type InputSuggestProps<T> = {
|
|
7
|
+
type: 'suggest';
|
|
8
|
+
className?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
fill?: boolean;
|
|
11
|
+
helperText?: string;
|
|
12
|
+
id?: string;
|
|
13
|
+
inputValueRenderer: InputValueRender<T>;
|
|
14
|
+
intent?: IIntentProps['intent'];
|
|
15
|
+
itemRenderer?: ItemRenderer<T>;
|
|
16
|
+
items: T[];
|
|
17
|
+
uniqueKey: string | ((item: T) => string | number);
|
|
18
|
+
label?: string;
|
|
19
|
+
labelInfo?: string;
|
|
20
|
+
multi?: boolean;
|
|
21
|
+
name?: string;
|
|
22
|
+
onChange: (evt: SimpleEvent<T | T[]>) => void;
|
|
23
|
+
placeholder?: string;
|
|
24
|
+
selectedItem: T | null;
|
|
25
|
+
selectedItems?: undefined;
|
|
26
|
+
tagRenderer?: undefined;
|
|
27
|
+
};
|
|
28
|
+
declare type InputMultiSelectProps<T> = {
|
|
29
|
+
type: 'multiselect';
|
|
30
|
+
className?: string;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
fill?: boolean;
|
|
33
|
+
helperText?: string;
|
|
34
|
+
id?: string;
|
|
35
|
+
inputValueRenderer: InputValueRender<T>;
|
|
36
|
+
intent?: IIntentProps['intent'];
|
|
37
|
+
itemRenderer?: ItemRenderer<T>;
|
|
38
|
+
items: T[];
|
|
39
|
+
uniqueKey: string | ((item: T) => string | number);
|
|
40
|
+
label?: string;
|
|
41
|
+
labelInfo?: string;
|
|
42
|
+
multi?: boolean;
|
|
43
|
+
name?: string;
|
|
44
|
+
onChange: (evt: SimpleEvent<T | T[]>) => void;
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
selectedItem?: undefined;
|
|
47
|
+
selectedItems: T[];
|
|
48
|
+
tagRenderer?: TagRender<T>;
|
|
49
|
+
};
|
|
50
|
+
export default function InputSelect<T>(props: Props<T>): JSX.Element;
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
14
|
+
if (mod && mod.__esModule) return mod;
|
|
15
|
+
var result = {};
|
|
16
|
+
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
17
|
+
result["default"] = mod;
|
|
18
|
+
return result;
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
var react_1 = __importStar(require("react"));
|
|
22
|
+
var core_1 = require("@blueprintjs/core");
|
|
23
|
+
var select_1 = require("@blueprintjs/select");
|
|
24
|
+
var Select_service_1 = require("../../../services/Select.service");
|
|
25
|
+
function InputSelect(props) {
|
|
26
|
+
var className = props.className, disabled = props.disabled, fill = props.fill, helperText = props.helperText, id = props.id, inputValueRenderer = props.inputValueRenderer, intent = props.intent, items = props.items, itemRenderer = props.itemRenderer, uniqueKey = props.uniqueKey, label = props.label, labelInfo = props.labelInfo, name = props.name, onChange = props.onChange, placeholder = props.placeholder, _a = props.selectedItem, selectedItem = _a === void 0 ? null : _a, tagRenderer = props.tagRenderer, type = props.type;
|
|
27
|
+
var _b = react_1.useState(''), query = _b[0], setQuery = _b[1];
|
|
28
|
+
var _c = react_1.useState(null), value = _c[0], setValue = _c[1];
|
|
29
|
+
var _d = react_1.useState([]), values = _d[0], setValues = _d[1];
|
|
30
|
+
react_1.useEffect(function () {
|
|
31
|
+
if (value !== selectedItem) {
|
|
32
|
+
setValue(selectedItem);
|
|
33
|
+
}
|
|
34
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
+
}, [selectedItem]);
|
|
36
|
+
function handleOnChange(value, _) {
|
|
37
|
+
var newValue = null;
|
|
38
|
+
if (type === 'multiselect') {
|
|
39
|
+
if (isItemSelected(value)) {
|
|
40
|
+
newValue = values.filter(function (item) { return value !== item; });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
newValue = values.concat(value);
|
|
44
|
+
}
|
|
45
|
+
setValues(newValue);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
newValue = value;
|
|
49
|
+
setValue(newValue);
|
|
50
|
+
}
|
|
51
|
+
onChange({ target: { value: newValue, name: name } });
|
|
52
|
+
}
|
|
53
|
+
function handleOnTagRemove(_, index) {
|
|
54
|
+
var newValues = values.filter(function (_, valueIndex) { return index !== valueIndex; });
|
|
55
|
+
setValues(newValues);
|
|
56
|
+
onChange({ target: { value: newValues, name: name } });
|
|
57
|
+
}
|
|
58
|
+
function handleOnClear() {
|
|
59
|
+
setValues([]);
|
|
60
|
+
onChange({ target: { value: [], name: name } });
|
|
61
|
+
}
|
|
62
|
+
function isItemSelected(item) {
|
|
63
|
+
return values.indexOf(item) !== -1;
|
|
64
|
+
}
|
|
65
|
+
function getCommonProps() {
|
|
66
|
+
return {
|
|
67
|
+
disabled: disabled,
|
|
68
|
+
fill: fill,
|
|
69
|
+
itemPredicate: Select_service_1.getFilter(inputValueRenderer),
|
|
70
|
+
itemRenderer: itemRenderer ||
|
|
71
|
+
Select_service_1.getItemRenderer(uniqueKey, inputValueRenderer, type === 'multiselect' ? isItemSelected : undefined),
|
|
72
|
+
items: items,
|
|
73
|
+
noResults: react_1.default.createElement(core_1.MenuItem, { disabled: true, text: "No results." }),
|
|
74
|
+
onItemSelect: handleOnChange,
|
|
75
|
+
onQueryChange: setQuery,
|
|
76
|
+
query: query,
|
|
77
|
+
popoverProps: { minimal: true },
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function renderClearButton() {
|
|
81
|
+
return values.length > 0 ? (react_1.default.createElement(core_1.Button, { icon: "cross", minimal: true, onClick: handleOnClear })) : undefined;
|
|
82
|
+
}
|
|
83
|
+
function renderSelectComponent() {
|
|
84
|
+
switch (type) {
|
|
85
|
+
case 'multiselect': {
|
|
86
|
+
return (react_1.default.createElement(select_1.MultiSelect, __assign({}, getCommonProps(), { resetOnSelect: true, selectedItems: values, tagRenderer: tagRenderer || inputValueRenderer, tagInputProps: {
|
|
87
|
+
onRemove: handleOnTagRemove,
|
|
88
|
+
rightElement: renderClearButton(),
|
|
89
|
+
tagProps: {},
|
|
90
|
+
} })));
|
|
91
|
+
}
|
|
92
|
+
default:
|
|
93
|
+
return (react_1.default.createElement(select_1.Suggest, __assign({}, getCommonProps(), { inputProps: { intent: intent, placeholder: placeholder }, inputValueRenderer: inputValueRenderer, resetOnSelect: false, selectedItem: value })));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return (react_1.default.createElement(core_1.FormGroup, { className: className, helperText: helperText, intent: intent, label: label, labelFor: id, labelInfo: labelInfo, disabled: disabled }, renderSelectComponent()));
|
|
97
|
+
}
|
|
98
|
+
exports.default = InputSelect;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var InputSelect_1 = __importDefault(require("./InputSelect"));
|
|
8
|
+
var addon_actions_1 = require("@storybook/addon-actions");
|
|
9
|
+
var items = [
|
|
10
|
+
{ firstName: 'Alvin', lastName: 'Kamara' },
|
|
11
|
+
{ firstName: 'Michael', lastName: 'Thomas' },
|
|
12
|
+
{ firstName: 'Todd', lastName: 'Gurley' },
|
|
13
|
+
{ firstName: 'Raheem', lastName: 'Mostert' },
|
|
14
|
+
{ firstName: 'Tyeke', lastName: 'Hill' },
|
|
15
|
+
{ firstName: 'Frank', lastName: 'Gore' },
|
|
16
|
+
{ firstName: 'Patrick', lastName: 'Willis' },
|
|
17
|
+
];
|
|
18
|
+
exports.InputSuggest = function () { return (react_1.default.createElement(InputSelect_1.default, { type: "suggest", label: "Football Players", name: "player", inputValueRenderer: function (item) { return item.firstName + " " + item.lastName; }, uniqueKey: "lastName", labelInfo: "(required)", helperText: "Please select a player.", intent: "danger", items: items, onChange: addon_actions_1.action('onChange'), placeholder: "Select football player", selectedItem: null })); };
|
|
19
|
+
exports.InputMultiselect = function () { return (react_1.default.createElement(InputSelect_1.default, { type: "multiselect", label: "Football Players", name: "player", inputValueRenderer: function (item) { return item.firstName + " " + item.lastName; }, uniqueKey: "lastName", labelInfo: "(required)", helperText: "Please select a player.", intent: "danger", items: items, onChange: addon_actions_1.action('onChange'), placeholder: "Select football player", selectedItems: [] })); };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './InputSelect';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { IIntentProps } from '@blueprintjs/core';
|
|
3
|
+
import { TimePrecision } from '@blueprintjs/datetime';
|
|
4
|
+
import { SimpleEvent } from '../../../types/Component.types';
|
|
5
|
+
interface Props {
|
|
6
|
+
className?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
fill?: boolean;
|
|
9
|
+
helperText?: string;
|
|
10
|
+
intent?: IIntentProps['intent'];
|
|
11
|
+
label?: string;
|
|
12
|
+
labelInfo?: string;
|
|
13
|
+
maxTime?: Date;
|
|
14
|
+
minTime?: Date;
|
|
15
|
+
name?: string;
|
|
16
|
+
onChange: (evt: SimpleEvent<Date>) => void;
|
|
17
|
+
precision?: TimePrecision;
|
|
18
|
+
selectAllOnFocus?: boolean;
|
|
19
|
+
showArrowButtons?: boolean;
|
|
20
|
+
value: Date | null;
|
|
21
|
+
useAmPm?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export default function InputTime(props: Props): JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
3
|
+
if (mod && mod.__esModule) return mod;
|
|
4
|
+
var result = {};
|
|
5
|
+
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
6
|
+
result["default"] = mod;
|
|
7
|
+
return result;
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
var react_1 = __importStar(require("react"));
|
|
11
|
+
var core_1 = require("@blueprintjs/core");
|
|
12
|
+
var datetime_1 = require("@blueprintjs/datetime");
|
|
13
|
+
function InputTime(props) {
|
|
14
|
+
var className = props.className, disabled = props.disabled, helperText = props.helperText, intent = props.intent, label = props.label, labelInfo = props.labelInfo, maxTime = props.maxTime, minTime = props.minTime, name = props.name, onChange = props.onChange, precision = props.precision, selectAllOnFocus = props.selectAllOnFocus, showArrowButtons = props.showArrowButtons, useAmPm = props.useAmPm;
|
|
15
|
+
var _a = react_1.useState(undefined), value = _a[0], setValue = _a[1];
|
|
16
|
+
react_1.useEffect(function () {
|
|
17
|
+
if (props.value) {
|
|
18
|
+
setValue(props.value);
|
|
19
|
+
}
|
|
20
|
+
}, []);
|
|
21
|
+
function handleOnChange(time) {
|
|
22
|
+
setValue(time);
|
|
23
|
+
onChange({ target: { name: name, value: time } });
|
|
24
|
+
}
|
|
25
|
+
return (react_1.default.createElement(core_1.FormGroup, { className: className, helperText: helperText, intent: intent, label: label, labelInfo: labelInfo, disabled: disabled },
|
|
26
|
+
react_1.default.createElement(datetime_1.TimePicker, { disabled: disabled, onChange: handleOnChange, maxTime: maxTime, minTime: minTime, precision: precision, selectAllOnFocus: selectAllOnFocus, showArrowButtons: showArrowButtons, value: value, useAmPm: useAmPm })));
|
|
27
|
+
}
|
|
28
|
+
exports.default = InputTime;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var addon_actions_1 = require("@storybook/addon-actions");
|
|
8
|
+
var InputTime_1 = __importDefault(require("./InputTime"));
|
|
9
|
+
exports.InputTime = function () {
|
|
10
|
+
return (react_1.default.createElement(InputTime_1.default, { name: "time", label: "Bedtime", labelInfo: "(required)", value: null, onChange: addon_actions_1.action('changed') }));
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './InputTime';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
/** @jsxRuntime classic */
|
|
22
|
+
/** @jsx jsx */
|
|
23
|
+
var react_1 = require("@emotion/react");
|
|
24
|
+
var short_uuid_1 = __importDefault(require("short-uuid"));
|
|
25
|
+
var hooks_1 = require("material-ui-popup-state/hooks");
|
|
26
|
+
var material_1 = require("@mui/material");
|
|
27
|
+
var icons_material_1 = require("@mui/icons-material");
|
|
28
|
+
var react_2 = require("react");
|
|
29
|
+
function ActionsMenu() {
|
|
30
|
+
var popupId = (0, react_2.useRef)(short_uuid_1.default.generate());
|
|
31
|
+
var popupState = (0, hooks_1.usePopupState)({ variant: 'popover', popupId: popupId.current });
|
|
32
|
+
return ((0, react_1.jsx)("div", null,
|
|
33
|
+
(0, react_1.jsx)(material_1.Tooltip, { css: (0, react_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n font-size: 0.875rem;\n background-color: #555;\n "], ["\n font-size: 0.875rem;\n background-color: #555;\n "]))), placement: "top", title: "Actions" },
|
|
34
|
+
(0, react_1.jsx)(material_1.IconButton, __assign({ css: (0, react_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n && {\n background-color: transparent;\n }\n "], ["\n && {\n background-color: transparent;\n }\n "]))) }, (0, hooks_1.bindTrigger)(popupState)),
|
|
35
|
+
(0, react_1.jsx)(icons_material_1.MapsUgc, null))),
|
|
36
|
+
(0, react_1.jsx)(material_1.Menu, __assign({}, (0, hooks_1.bindMenu)(popupState), { anchorOrigin: { vertical: 'top', horizontal: 'left' }, transformOrigin: { vertical: 'bottom', horizontal: 'right' } }),
|
|
37
|
+
(0, react_1.jsx)(material_1.MenuItem, null, "Template 1"),
|
|
38
|
+
(0, react_1.jsx)(material_1.MenuItem, null, "Template 2"),
|
|
39
|
+
(0, react_1.jsx)(material_1.MenuItem, null, "Template 3"))));
|
|
40
|
+
}
|
|
41
|
+
exports.default = ActionsMenu;
|
|
42
|
+
var templateObject_1, templateObject_2;
|
|
@@ -40,6 +40,7 @@ var react_2 = require("react");
|
|
|
40
40
|
var faker_1 = __importDefault(require("faker"));
|
|
41
41
|
var short_uuid_1 = __importDefault(require("short-uuid"));
|
|
42
42
|
var ChatInterface_1 = __importDefault(require("./ChatInterface"));
|
|
43
|
+
var Workspaces_constants_1 = require("@vendorflow/common/lib/constants/Workspaces.constants");
|
|
43
44
|
// tslint:disable-next-line:no-console
|
|
44
45
|
function ChatInterface() {
|
|
45
46
|
var _a = __read((0, react_2.useState)(true), 2), isLoading = _a[0], setLoading = _a[1];
|
|
@@ -48,7 +49,7 @@ function ChatInterface() {
|
|
|
48
49
|
var _d = __read((0, react_2.useState)([]), 2), messages = _d[0], setMessages = _d[1];
|
|
49
50
|
var _e = __read((0, react_2.useState)(true), 2), hasMore = _e[0], setHasMore = _e[1];
|
|
50
51
|
(0, react_2.useEffect)(function () {
|
|
51
|
-
setMessages(new Array(5).fill(null).map(generateMessage));
|
|
52
|
+
setMessages(new Array(5).fill(null).map(generateMessage).concat([generateSystemMessage()]));
|
|
52
53
|
setLoading(false);
|
|
53
54
|
setFetching(false);
|
|
54
55
|
}, []);
|
|
@@ -58,6 +59,16 @@ function ChatInterface() {
|
|
|
58
59
|
function generateId() {
|
|
59
60
|
return short_uuid_1.default.generate();
|
|
60
61
|
}
|
|
62
|
+
function generateSystemMessage() {
|
|
63
|
+
return {
|
|
64
|
+
id: generateId(),
|
|
65
|
+
userId: Workspaces_constants_1.SYSTEM_IDENTITY_ID,
|
|
66
|
+
username: 'System',
|
|
67
|
+
initials: 'S',
|
|
68
|
+
timestamp: generateTimestamp(),
|
|
69
|
+
content: faker_1.default.lorem.sentence(5, 2),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
61
72
|
function generateMessage() {
|
|
62
73
|
var user = faker_1.default.random.arrayElement([
|
|
63
74
|
{
|
|
@@ -14,6 +14,7 @@ var react_2 = require("react");
|
|
|
14
14
|
var react_textarea_autosize_1 = __importDefault(require("react-textarea-autosize"));
|
|
15
15
|
var material_1 = require("@mui/material");
|
|
16
16
|
var icons_material_1 = require("@mui/icons-material");
|
|
17
|
+
var ActionsMenu_1 = __importDefault(require("./ActionsMenu"));
|
|
17
18
|
var MessageInput = (0, react_2.forwardRef)(function (_a, ref) {
|
|
18
19
|
var handleClickSend = _a.handleClickSend, message = _a.message, placeholder = _a.placeholder, setMessage = _a.setMessage, isSubmitting = _a.isSubmitting;
|
|
19
20
|
function handleOnChange(_a) {
|
|
@@ -42,8 +43,11 @@ var MessageInput = (0, react_2.forwardRef)(function (_a, ref) {
|
|
|
42
43
|
var _a, _b;
|
|
43
44
|
return (0, react_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell',\n 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n resize: none;\n width: calc(100% - 3.5rem);\n outline: 0 none transparent;\n font-size: 16px;\n margin: 0.5rem;\n padding: 0.5rem;\n box-sizing: border-box;\n border-radius: 5px;\n border-color: ", ";\n "], ["\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell',\n 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n resize: none;\n width: calc(100% - 3.5rem);\n outline: 0 none transparent;\n font-size: 16px;\n margin: 0.5rem;\n padding: 0.5rem;\n box-sizing: border-box;\n border-radius: 5px;\n border-color: ", ";\n "])), ((_b = (_a = theme === null || theme === void 0 ? void 0 : theme.palette) === null || _a === void 0 ? void 0 : _a.primary) === null || _b === void 0 ? void 0 : _b.main) || 'hsl(0, 0%, 89%)');
|
|
44
45
|
}, placeholder: placeholder || 'Type your message here...', value: message, onChange: handleOnChange, onKeyDown: handleOnKeyDown, minRows: 3, maxRows: 8 }),
|
|
45
|
-
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n
|
|
46
|
-
(0, react_1.jsx)(
|
|
46
|
+
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n padding-right: 0.5rem;\n overflow: hidden;\n "], ["\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n padding-right: 0.5rem;\n overflow: hidden;\n "]))) },
|
|
47
|
+
(0, react_1.jsx)(ActionsMenu_1.default, null),
|
|
48
|
+
isSubmitting ? ((0, react_1.jsx)(material_1.CircularProgress, { css: (0, react_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n margin: 8px;\n "], ["\n margin: 8px;\n "]))), size: "1.5rem" })) : ((0, react_1.jsx)(material_1.Tooltip, { title: "Send Now", placement: "bottom" },
|
|
49
|
+
(0, react_1.jsx)(material_1.IconButton, { onClick: handleOnClickSend, disabled: isSubmitting },
|
|
50
|
+
(0, react_1.jsx)(icons_material_1.Send, null)))))));
|
|
47
51
|
});
|
|
48
52
|
exports.default = MessageInput;
|
|
49
53
|
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
@@ -27,6 +27,7 @@ var date_fns_1 = require("date-fns");
|
|
|
27
27
|
var icons_material_1 = require("@mui/icons-material");
|
|
28
28
|
var material_1 = require("@mui/material");
|
|
29
29
|
var react_2 = require("react");
|
|
30
|
+
var Workspaces_constants_1 = require("@vendorflow/common/lib/constants/Workspaces.constants");
|
|
30
31
|
function MessageItem(_a) {
|
|
31
32
|
var userId = _a.userId, message = _a.message, colors = _a.colors;
|
|
32
33
|
var _b = __read((0, react_2.useState)(getUnixTimestamp()), 2), displayUpdateAt = _b[0], setDisplayUpdateAt = _b[1];
|
|
@@ -56,7 +57,7 @@ function MessageItem(_a) {
|
|
|
56
57
|
return ((0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n width: 100%;\n background: white;\n margin-top: 0.5rem;\n border-radius: 4px;\n display: flex;\n flex-direction: row;\n "], ["\n width: 100%;\n background: white;\n margin-top: 0.5rem;\n border-radius: 4px;\n display: flex;\n flex-direction: row;\n "]))) },
|
|
57
58
|
(0, react_1.jsx)(material_1.Avatar, { css: function (theme) {
|
|
58
59
|
var _a, _b, _c, _d, _e;
|
|
59
|
-
return (0, react_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n && {\n font-size: 1rem;\n height: 2rem;\n width: 2rem;\n margin-right: 0.5rem;\n background-color: ", ";\n }\n "], ["\n && {\n font-size: 1rem;\n height: 2rem;\n width: 2rem;\n margin-right: 0.5rem;\n background-color: ", ";\n }\n "])), userId === message.userId
|
|
60
|
+
return (0, react_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n && {\n font-size: 1rem;\n height: 2rem;\n width: 2rem;\n margin-right: 0.5rem;\n visibility: ", ";\n background-color: ", ";\n }\n "], ["\n && {\n font-size: 1rem;\n height: 2rem;\n width: 2rem;\n margin-right: 0.5rem;\n visibility: ", ";\n background-color: ", ";\n }\n "])), message.userId === Workspaces_constants_1.SYSTEM_IDENTITY_ID ? 'hidden' : 'visible', userId === message.userId
|
|
60
61
|
? (colors === null || colors === void 0 ? void 0 : colors.user) || ((_c = (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.custom) === null || _a === void 0 ? void 0 : _a.palette) === null || _b === void 0 ? void 0 : _b.tertiary) === null || _c === void 0 ? void 0 : _c.main) || 'hsl(0, 0%, 89%)'
|
|
61
62
|
: (colors === null || colors === void 0 ? void 0 : colors.others) || ((_e = (_d = theme === null || theme === void 0 ? void 0 : theme.palette) === null || _d === void 0 ? void 0 : _d.primary) === null || _e === void 0 ? void 0 : _e.main) || 'hsl(0, 0%, 47%)');
|
|
62
63
|
} }, message.initials === '' ? (0, react_1.jsx)(icons_material_1.Person, null) : message.initials),
|
|
@@ -64,7 +65,7 @@ function MessageItem(_a) {
|
|
|
64
65
|
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n "], ["\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n "]))) },
|
|
65
66
|
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n font-weight: 700;\n font-size: 0.75rem;\n display: inline-block;\n margin-right: 0.25rem;\n "], ["\n font-weight: 700;\n font-size: 0.75rem;\n display: inline-block;\n margin-right: 0.25rem;\n "]))) }, message.username),
|
|
66
67
|
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n font-size: 0.75rem;\n display: inline-block;\n "], ["\n font-size: 0.75rem;\n display: inline-block;\n "]))) }, timeDisplay)),
|
|
67
|
-
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n font-size: 0.875rem;\n white-space: break-spaces;\n "], ["\n font-size: 0.875rem;\n white-space: break-spaces;\n "]))) }, message.content))));
|
|
68
|
+
(0, react_1.jsx)("div", { css: (0, react_1.css)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n color: ", ";\n font-size: 0.875rem;\n white-space: break-spaces;\n "], ["\n color: ", ";\n font-size: 0.875rem;\n white-space: break-spaces;\n "])), message.userId === Workspaces_constants_1.SYSTEM_IDENTITY_ID ? 'hsl(0, 0%, 65%)' : 'inherit') }, message.content))));
|
|
68
69
|
}
|
|
69
70
|
exports.default = MessageItem;
|
|
70
71
|
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { IItemRendererProps } from '@blueprintjs/select';
|
|
3
|
+
import { UniqueKey, InputValueRender } from 'types/Component.types';
|
|
4
|
+
export declare function getFilter<T>(inputValueRenderer: InputValueRender<T>): (query: string, item: T, index?: number | undefined, exactMatch?: boolean | undefined) => boolean;
|
|
5
|
+
export declare function getItemRenderer<T>(uniqueKey: UniqueKey<T>, inputValueRenderer: InputValueRender<T>, isItemSelected?: (item: T) => boolean): (item: T, { handleClick, modifiers, query }: IItemRendererProps) => JSX.Element | null;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var core_1 = require("@blueprintjs/core");
|
|
8
|
+
function escapeRegExpChars(text) {
|
|
9
|
+
return text.replace(/([.*+?^=!:${}()|[\]/\\])/g, '\\$1');
|
|
10
|
+
}
|
|
11
|
+
function highlightText(text, query) {
|
|
12
|
+
var lastIndex = 0;
|
|
13
|
+
var words = query
|
|
14
|
+
.split(/\s+/)
|
|
15
|
+
.filter(function (word) { return word.length > 0; })
|
|
16
|
+
.map(escapeRegExpChars);
|
|
17
|
+
if (words.length === 0) {
|
|
18
|
+
return [text];
|
|
19
|
+
}
|
|
20
|
+
var regexp = new RegExp(words.join('|'), 'gi');
|
|
21
|
+
var tokens = [];
|
|
22
|
+
while (true) {
|
|
23
|
+
var match = regexp.exec(text);
|
|
24
|
+
if (!match) {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
var length_1 = match[0].length;
|
|
28
|
+
var before = text.slice(lastIndex, regexp.lastIndex - length_1);
|
|
29
|
+
if (before.length > 0) {
|
|
30
|
+
tokens.push(before);
|
|
31
|
+
}
|
|
32
|
+
lastIndex = regexp.lastIndex;
|
|
33
|
+
tokens.push(react_1.default.createElement("strong", { key: lastIndex }, match[0]));
|
|
34
|
+
}
|
|
35
|
+
var rest = text.slice(lastIndex);
|
|
36
|
+
if (rest.length > 0) {
|
|
37
|
+
tokens.push(rest);
|
|
38
|
+
}
|
|
39
|
+
return tokens;
|
|
40
|
+
}
|
|
41
|
+
function getFilter(inputValueRenderer) {
|
|
42
|
+
return function filterItems(query, item, index, exactMatch) {
|
|
43
|
+
return exactMatch
|
|
44
|
+
? inputValueRenderer(item).toLowerCase() === query.toLowerCase()
|
|
45
|
+
: inputValueRenderer(item).toLowerCase().includes(query.toLowerCase());
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.getFilter = getFilter;
|
|
49
|
+
function getItemRenderer(uniqueKey, inputValueRenderer, isItemSelected) {
|
|
50
|
+
return function renderItem(item, _a) {
|
|
51
|
+
var handleClick = _a.handleClick, modifiers = _a.modifiers, query = _a.query;
|
|
52
|
+
if (!modifiers.matchesPredicate) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
var text = inputValueRenderer(item);
|
|
56
|
+
var key = null;
|
|
57
|
+
if (typeof uniqueKey === 'string') {
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
key = item[uniqueKey];
|
|
60
|
+
}
|
|
61
|
+
else if (typeof uniqueKey === 'function') {
|
|
62
|
+
key = uniqueKey(item);
|
|
63
|
+
}
|
|
64
|
+
return (react_1.default.createElement(core_1.MenuItem, { active: modifiers.active, icon: isItemSelected && isItemSelected(item) ? 'tick' : 'blank', disabled: modifiers.disabled, label: undefined, key: key, onClick: handleClick, text: highlightText(text, query) }));
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
exports.getItemRenderer = getItemRenderer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vendorflow/components",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.49",
|
|
4
4
|
"description": "React components for vendorflow",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@emotion/babel-plugin": "^11.3.0",
|
|
47
47
|
"@emotion/react": "^11.4.0",
|
|
48
48
|
"@emotion/styled": "^11.3.0",
|
|
49
|
-
"@mui/icons-material": "^5.
|
|
49
|
+
"@mui/icons-material": "^5.2.1",
|
|
50
50
|
"@mui/lab": "^5.0.0-alpha.50",
|
|
51
51
|
"@mui/material": "^5.0.3",
|
|
52
52
|
"@mui/styles": "^5.0.1",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"@types/react-table": "^7.7.6",
|
|
63
63
|
"@typescript-eslint/eslint-plugin": "^4.32.0",
|
|
64
64
|
"@typescript-eslint/parser": "^4.32.0",
|
|
65
|
+
"@vendorflow/common": "^1.0.36",
|
|
65
66
|
"babel-eslint": "10.1.0",
|
|
66
67
|
"babel-jest": "^24.9.0",
|
|
67
68
|
"babel-loader": "^8.2.2",
|
|
@@ -96,6 +97,7 @@
|
|
|
96
97
|
"jest-resolve": "24.9.0",
|
|
97
98
|
"jest-watch-typeahead": "0.4.2",
|
|
98
99
|
"lodash": "^4.17.15",
|
|
100
|
+
"material-ui-popup-state": "^2.0.0",
|
|
99
101
|
"mini-css-extract-plugin": "0.9.0",
|
|
100
102
|
"nanoid": "^3.1.30",
|
|
101
103
|
"optimize-css-assets-webpack-plugin": "5.0.3",
|