studiokit-scaffolding-js 7.0.17 → 7.0.19
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/components/AccessibleOverlayTrigger.d.ts +12 -0
- package/lib/components/AccessibleOverlayTrigger.js +45 -0
- package/lib/components/ActionList.js +2 -2
- package/lib/components/ConnectedModal.js +1 -1
- package/lib/components/Forms/DateField.js +14 -17
- package/lib/components/Forms/TimeField.js +14 -32
- package/lib/components/HOC/ConnectedModalComponent.d.ts +0 -1
- package/lib/components/HOC/ConnectedModalComponent.js +2 -6
- package/lib/components/HOC/FullscreenModalComponent.d.ts +2 -2
- package/lib/components/HOC/FullscreenModalComponent.js +1 -1
- package/lib/components/Quill/ImageWithAltTextModal.js +2 -2
- package/lib/components/UserRoles/Add.js +2 -2
- package/lib/components/UserRoles/RoleCell.js +3 -4
- package/lib/components/UserRoles/Select.js +2 -1
- package/lib/components/UserRoles/index.d.ts +1 -1
- package/lib/css/components/_forms.css +3 -2
- package/lib/css/components/_quill.css +2 -5
- package/lib/utils/date.d.ts +0 -2
- package/lib/utils/date.js +1 -14
- package/lib/utils/shard.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { OverlayTriggerProps } from 'react-bootstrap';
|
|
3
|
+
interface AccessibleOverlayTriggerProps extends Omit<OverlayTriggerProps, 'overlay'> {
|
|
4
|
+
overlay: React.ReactNode;
|
|
5
|
+
screenReaderNodeLocation?: 'before' | 'after';
|
|
6
|
+
popoverStyle?: React.CSSProperties;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Wrapper for react-bootstrap's OverlayTrigger with custom popover logic to improve screen reader support.
|
|
10
|
+
*/
|
|
11
|
+
export declare const AccessibleOverlayTrigger: ({ children, overlay, popoverStyle, screenReaderNodeLocation, ...restProps }: AccessibleOverlayTriggerProps) => React.JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
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 __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.AccessibleOverlayTrigger = void 0;
|
|
29
|
+
var react_1 = __importDefault(require("react"));
|
|
30
|
+
var react_bootstrap_1 = require("react-bootstrap");
|
|
31
|
+
var useGuid_1 = require("../hooks/useGuid");
|
|
32
|
+
/**
|
|
33
|
+
* Wrapper for react-bootstrap's OverlayTrigger with custom popover logic to improve screen reader support.
|
|
34
|
+
*/
|
|
35
|
+
var AccessibleOverlayTrigger = function (_a) {
|
|
36
|
+
var children = _a.children, overlay = _a.overlay, popoverStyle = _a.popoverStyle, _b = _a.screenReaderNodeLocation, screenReaderNodeLocation = _b === void 0 ? 'after' : _b, restProps = __rest(_a, ["children", "overlay", "popoverStyle", "screenReaderNodeLocation"]);
|
|
37
|
+
var guid = useGuid_1.useGuid();
|
|
38
|
+
var popover = (react_1.default.createElement(react_bootstrap_1.Popover, { id: "popover-" + guid, "aria-hidden": true, style: popoverStyle }, overlay));
|
|
39
|
+
var screenReaderNode = react_1.default.createElement("span", { className: "sr-only" }, overlay);
|
|
40
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
41
|
+
screenReaderNodeLocation === 'before' && screenReaderNode,
|
|
42
|
+
react_1.default.createElement(react_bootstrap_1.OverlayTrigger, __assign({}, restProps, { overlay: popover }), children),
|
|
43
|
+
screenReaderNodeLocation === 'after' && screenReaderNode));
|
|
44
|
+
};
|
|
45
|
+
exports.AccessibleOverlayTrigger = AccessibleOverlayTrigger;
|
|
@@ -64,10 +64,10 @@ var ActionList = function (_a) {
|
|
|
64
64
|
defaultAction.icon,
|
|
65
65
|
defaultAction.name)),
|
|
66
66
|
!!model && (actionCount > 1 || alwaysShowKebab) && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
67
|
-
react_1.default.createElement(core_1.Button, { ref: anchorRef, onClick: function (event) { return setInfoMenuAnchorElement(event.currentTarget); }, "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? "info-menu-" + model.id : undefined, className: "action-list-text-button" + (defaultAction ? ' with-default-action' : ''), color: "primary" },
|
|
67
|
+
react_1.default.createElement(core_1.Button, { ref: anchorRef, onClick: function (event) { return setInfoMenuAnchorElement(event.currentTarget); }, "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? "info-menu-" + model.id : undefined, "aria-expanded": !!infoMenuAnchorElement, className: "action-list-text-button" + (defaultAction ? ' with-default-action' : ''), color: "primary" },
|
|
68
68
|
"Actions",
|
|
69
69
|
react_1.default.createElement(MoreVert_1.default, { color: "primary" })),
|
|
70
|
-
react_1.default.createElement(core_1.IconButton, { ref: anchorRef, onClick: function (event) { return setInfoMenuAnchorElement(event.currentTarget); }, "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? "info-menu-" + model.id : undefined, className: "action-list-icon-button" + (defaultAction ? ' with-default-action' : '') },
|
|
70
|
+
react_1.default.createElement(core_1.IconButton, { ref: anchorRef, onClick: function (event) { return setInfoMenuAnchorElement(event.currentTarget); }, "aria-label": "Actions", "aria-haspopup": "true", "aria-controls": infoMenuAnchorElement ? "info-menu-" + model.id : undefined, "aria-expanded": !!infoMenuAnchorElement, className: "action-list-icon-button" + (defaultAction ? ' with-default-action' : '') },
|
|
71
71
|
react_1.default.createElement(MoreVert_1.default, { color: "primary" })),
|
|
72
72
|
react_1.default.createElement(core_1.Popper, { open: !!infoMenuAnchorElement, anchorEl: infoMenuAnchorElement, placement: "bottom-end", className: "z-1" + (className ? " " + className : ''), transition: true }, function (_a) {
|
|
73
73
|
var TransitionProps = _a.TransitionProps, placement = _a.placement;
|
|
@@ -31,7 +31,7 @@ var ConnectedModalComponent_1 = require("./HOC/ConnectedModalComponent");
|
|
|
31
31
|
var ConnectedModal = function (_a) {
|
|
32
32
|
var
|
|
33
33
|
// exclude props that shouldn't be passed to the Modal
|
|
34
|
-
guid = _a.guid, modals = _a.modals,
|
|
34
|
+
guid = _a.guid, modals = _a.modals, dispatch = _a.dispatch, modalProps = __rest(_a, ["guid", "modals", "dispatch"]);
|
|
35
35
|
return react_1.default.createElement(react_bootstrap_1.Modal, __assign({}, modalProps));
|
|
36
36
|
};
|
|
37
37
|
/**
|
|
@@ -42,6 +42,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
42
42
|
__setModuleDefault(result, mod);
|
|
43
43
|
return result;
|
|
44
44
|
};
|
|
45
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
46
|
+
var t = {};
|
|
47
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
48
|
+
t[p] = s[p];
|
|
49
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
50
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
51
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
52
|
+
t[p[i]] = s[p[i]];
|
|
53
|
+
}
|
|
54
|
+
return t;
|
|
55
|
+
};
|
|
45
56
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
57
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
58
|
};
|
|
@@ -72,28 +83,14 @@ var DateField = /** @class */ (function (_super) {
|
|
|
72
83
|
return _this;
|
|
73
84
|
}
|
|
74
85
|
DateField.prototype.render = function () {
|
|
75
|
-
var _a = this.props,
|
|
76
|
-
var formatWarning = !!value && value.length > 0 && !dateRegex.test(value)
|
|
77
|
-
? date_1.isDateInputSupported
|
|
78
|
-
? "Must match the format \"MM/DD/YYYY\""
|
|
79
|
-
: "Must match the format \"" + dateFormat + "\""
|
|
80
|
-
: !!value && value.length > 0 && !this.isDateValid(value)
|
|
81
|
-
? 'Must be a valid date'
|
|
82
|
-
: undefined;
|
|
83
|
-
// prevent custom props from being passed to TextField
|
|
84
|
-
var newProps = __assign({}, this.props);
|
|
85
|
-
var className = newProps.className;
|
|
86
|
-
delete newProps.minDate;
|
|
87
|
-
delete newProps.maxDate;
|
|
88
|
-
delete newProps.className;
|
|
86
|
+
var _a = this.props, className = _a.className, minDate = _a.minDate, maxDate = _a.maxDate, disabled = _a.disabled, textFieldProps = __rest(_a, ["className", "minDate", "maxDate", "disabled"]);
|
|
89
87
|
return (react_1.default.createElement("div", { className: className },
|
|
90
|
-
react_1.default.createElement(TextField_1.default, __assign({},
|
|
88
|
+
react_1.default.createElement(TextField_1.default, __assign({}, textFieldProps, { type: "date", className: "material-text-field-date", inputProps: {
|
|
91
89
|
pattern: datePattern,
|
|
92
90
|
placeholder: dateFormat,
|
|
93
91
|
min: !!minDate && !disabled ? date_1.getFormattedNumberedDateForInput(minDate) : null,
|
|
94
92
|
max: !!maxDate && !disabled ? date_1.getFormattedNumberedDateForInput(maxDate) : null
|
|
95
|
-
}, onChange: this.onChange }))
|
|
96
|
-
formatWarning && react_1.default.createElement("label", { className: "color-red i f6 db" }, formatWarning)));
|
|
93
|
+
}, onChange: this.onChange }))));
|
|
97
94
|
};
|
|
98
95
|
return DateField;
|
|
99
96
|
}(react_1.Component));
|
|
@@ -42,17 +42,25 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
42
42
|
__setModuleDefault(result, mod);
|
|
43
43
|
return result;
|
|
44
44
|
};
|
|
45
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
46
|
+
var t = {};
|
|
47
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
48
|
+
t[p] = s[p];
|
|
49
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
50
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
51
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
52
|
+
t[p[i]] = s[p[i]];
|
|
53
|
+
}
|
|
54
|
+
return t;
|
|
55
|
+
};
|
|
45
56
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
57
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
58
|
};
|
|
48
59
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
60
|
exports.TimeField = void 0;
|
|
50
61
|
var TextField_1 = __importDefault(require("@material-ui/core/TextField"));
|
|
51
|
-
var Help_1 = __importDefault(require("@material-ui/icons/Help"));
|
|
52
62
|
var moment_1 = __importDefault(require("moment"));
|
|
53
63
|
var react_1 = __importStar(require("react"));
|
|
54
|
-
var react_bootstrap_1 = require("react-bootstrap");
|
|
55
|
-
var date_1 = require("../../utils/date");
|
|
56
64
|
var timePattern = '^(2[0-3]|[0-1][0-9]):([0-5][0-9])$';
|
|
57
65
|
var timeFormat = 'HH:mm';
|
|
58
66
|
var timeRegex = new RegExp(timePattern);
|
|
@@ -75,38 +83,12 @@ var TimeField = /** @class */ (function (_super) {
|
|
|
75
83
|
return _this;
|
|
76
84
|
}
|
|
77
85
|
TimeField.prototype.render = function () {
|
|
78
|
-
var
|
|
79
|
-
var formatWarning = !!value && value.length > 0 && !timeRegex.test(value)
|
|
80
|
-
? date_1.isTimeInputSupported
|
|
81
|
-
? "Must match the format \"hh:mm a\""
|
|
82
|
-
: "Must match the format \"" + timeFormat + "\" using 24 hour time"
|
|
83
|
-
: !!value && value.length > 0 && !this.isTimeValid(value)
|
|
84
|
-
? 'Must be a valid time'
|
|
85
|
-
: undefined;
|
|
86
|
-
// prevent some props from being passed to TextField
|
|
87
|
-
var newProps = __assign({}, this.props);
|
|
88
|
-
var className = newProps.className;
|
|
89
|
-
delete newProps.className;
|
|
90
|
-
if (!!newProps.label && !date_1.isTimeInputSupported) {
|
|
91
|
-
var popover = (react_1.default.createElement(react_bootstrap_1.Popover, { id: "activatedAssignments" },
|
|
92
|
-
react_1.default.createElement("h3", null, "Missing Browser Features"),
|
|
93
|
-
react_1.default.createElement("p", null,
|
|
94
|
-
"Your current browser does not have a default time picker. You must use the 24 hour time format, \"",
|
|
95
|
-
timeFormat,
|
|
96
|
-
"\".")));
|
|
97
|
-
newProps.label = (react_1.default.createElement(react_bootstrap_1.OverlayTrigger, { placement: "top", trigger: ['click', 'hover', 'focus'], overlay: popover },
|
|
98
|
-
react_1.default.createElement("span", null,
|
|
99
|
-
newProps.label,
|
|
100
|
-
" ",
|
|
101
|
-
react_1.default.createElement("small", null, "(24 hour time)"),
|
|
102
|
-
react_1.default.createElement(Help_1.default, { color: "primary", className: "ml1 v-top f7", fontSize: "small", tabIndex: 0 }))));
|
|
103
|
-
}
|
|
86
|
+
var _a = this.props, className = _a.className, textFieldProps = __rest(_a, ["className"]);
|
|
104
87
|
return (react_1.default.createElement("div", { className: className },
|
|
105
|
-
react_1.default.createElement(TextField_1.default, __assign({},
|
|
88
|
+
react_1.default.createElement(TextField_1.default, __assign({}, textFieldProps, { type: "time", className: "material-text-field-time", inputProps: {
|
|
106
89
|
pattern: timePattern,
|
|
107
90
|
placeholder: timeFormat
|
|
108
|
-
}, onChange: this.onChange }))
|
|
109
|
-
formatWarning && react_1.default.createElement("label", { className: "color-red i f6 db" }, formatWarning)));
|
|
91
|
+
}, onChange: this.onChange }))));
|
|
110
92
|
};
|
|
111
93
|
return TimeField;
|
|
112
94
|
}(react_1.Component));
|
|
@@ -118,12 +118,8 @@ function configureConnectedModalComponent(WrappedComponent, isFullscreen) {
|
|
|
118
118
|
this.onExited();
|
|
119
119
|
};
|
|
120
120
|
ConnectedModalComponent.prototype.render = function () {
|
|
121
|
-
var _a,
|
|
122
|
-
|
|
123
|
-
var topOpenFullscreenModal = lodash_1.maxBy(Object.values(modals).filter(function (m) { return m.isFullscreen; }), function (modal) { return modal.index; });
|
|
124
|
-
var thisModalIndex = (_b = (_a = modals[guid]) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : null;
|
|
125
|
-
var isTopOpenFullscreenModal = (topOpenFullscreenModal === null || topOpenFullscreenModal === void 0 ? void 0 : topOpenFullscreenModal.index) === thisModalIndex;
|
|
126
|
-
return (react_1.default.createElement(WrappedComponent, __assign({}, ownProps, { guid: guid, onEntering: this.onEntering, onExited: this.onExited, isTopOpenFullscreenModal: isTopOpenFullscreenModal })));
|
|
121
|
+
var _a = this.props, modals = _a.modals, guid = _a.guid, ownProps = __rest(_a, ["modals", "guid"]);
|
|
122
|
+
return (react_1.default.createElement(WrappedComponent, __assign({}, ownProps, { guid: guid, onEntering: this.onEntering, onExited: this.onExited })));
|
|
127
123
|
};
|
|
128
124
|
return ConnectedModalComponent;
|
|
129
125
|
}(react_1.Component));
|
|
@@ -31,7 +31,7 @@ interface FullscreenModalState {
|
|
|
31
31
|
*
|
|
32
32
|
* @param WrappedComponent The component to wrap.
|
|
33
33
|
*/
|
|
34
|
-
export declare function configureFullscreenModalComponent<TOwnProps extends
|
|
34
|
+
export declare function configureFullscreenModalComponent<TOwnProps extends {}>(WrappedComponent: ComponentType<TOwnProps & FullscreenModalWrappedProps>): {
|
|
35
35
|
new (props: TOwnProps & FullscreenModalOwnProps & ConnectedModalWrappedProps & GuidComponentWrappedProps): {
|
|
36
36
|
componentDidMount(): void;
|
|
37
37
|
componentDidUpdate(prevProps: TOwnProps & FullscreenModalOwnProps & ConnectedModalWrappedProps & GuidComponentWrappedProps, prevState: FullscreenModalState): void;
|
|
@@ -69,5 +69,5 @@ export declare function configureFullscreenModalComponent<TOwnProps extends obje
|
|
|
69
69
|
*
|
|
70
70
|
* @param WrappedComponent The component to wrap.
|
|
71
71
|
*/
|
|
72
|
-
export declare function fullscreenModalComponent<TOwnProps extends
|
|
72
|
+
export declare function fullscreenModalComponent<TOwnProps extends {}>(WrappedComponent: ComponentType<TOwnProps & FullscreenModalWrappedProps>): ComponentClass<TOwnProps & FullscreenModalOwnProps>;
|
|
73
73
|
export default fullscreenModalComponent;
|
|
@@ -120,7 +120,7 @@ function configureFullscreenModalComponent(WrappedComponent) {
|
|
|
120
120
|
});
|
|
121
121
|
};
|
|
122
122
|
FullscreenModalComponent.prototype.render = function () {
|
|
123
|
-
var _a = this.props,
|
|
123
|
+
var _a = this.props, onEntering = _a.onEntering, onExited = _a.onExited, _ = _a.isOpen, closeModal = _a.closeModal, remainingProps = __rest(_a, ["onEntering", "onExited", "isOpen", "closeModal"]);
|
|
124
124
|
// do not pass ConnectedModalWrappedProps to wrapped component
|
|
125
125
|
var wrappedProps = __assign(__assign({}, remainingProps), { closeModal: this.closeModal });
|
|
126
126
|
var isOpen = this.state.isOpen;
|
|
@@ -30,6 +30,7 @@ var lodash_1 = require("lodash");
|
|
|
30
30
|
var react_1 = __importStar(require("react"));
|
|
31
31
|
var react_bootstrap_1 = require("react-bootstrap");
|
|
32
32
|
var react_quill_1 = require("react-quill");
|
|
33
|
+
var AccessibleOverlayTrigger_1 = require("../AccessibleOverlayTrigger");
|
|
33
34
|
var ConnectedModal_1 = __importDefault(require("../ConnectedModal"));
|
|
34
35
|
var ErrorMessage_1 = require("../ErrorMessage");
|
|
35
36
|
var ImageWarning_1 = require("./ImageWarning");
|
|
@@ -137,8 +138,7 @@ var ImageWithAltTextModal = function (_a) {
|
|
|
137
138
|
react_1.default.createElement("h3", { className: "mv0" },
|
|
138
139
|
react_1.default.createElement(react_bootstrap_1.FormLabel, { htmlFor: "img-alt-text", className: "mb0" },
|
|
139
140
|
"Alt Text *",
|
|
140
|
-
react_1.default.createElement(
|
|
141
|
-
react_1.default.createElement("p", { className: "mb0" }, "Used by screen readers to describe the content of an image.")) },
|
|
141
|
+
react_1.default.createElement(AccessibleOverlayTrigger_1.AccessibleOverlayTrigger, { placement: "top", trigger: ['hover', 'focus'], overlay: react_1.default.createElement("p", { className: "mb0" }, "Used by screen readers to describe the content of an image.") },
|
|
142
142
|
react_1.default.createElement("button", { type: "button", className: "dib help-button bg-transparent" },
|
|
143
143
|
react_1.default.createElement(Help_1.default, { color: "primary", titleAccess: "Alt text explanation" })))))),
|
|
144
144
|
react_1.default.createElement(react_bootstrap_1.FormControl, { id: "img-alt-text", "aria-label": "Image Alt Text", as: "textarea", onChange: function (event) {
|
|
@@ -126,7 +126,7 @@ var UserRolesAdd = /** @class */ (function (_super) {
|
|
|
126
126
|
var _a = this.state, identifiers = _a.identifiers, role = _a.role, showErrorAlert = _a.showErrorAlert, errorMessage = _a.errorMessage;
|
|
127
127
|
var _b = this.props, entityName = _b.entityName, isAddingUsersToRole = _b.isAddingUsersToRole, roleDescriptions = _b.roleDescriptions, renderAddDescription = _b.renderAddDescription, disabled = _b.disabled, textForRole = _b.textForRole;
|
|
128
128
|
var roles = lodash_1.default.keys(roleDescriptions);
|
|
129
|
-
var
|
|
129
|
+
var rolePopoverContent = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
130
130
|
react_1.default.createElement("h3", null, "Role"),
|
|
131
131
|
roles.map(function (r) { return (react_1.default.createElement(react_1.Fragment, { key: r }, roleDescriptions[r])); })));
|
|
132
132
|
var appConfig = configuration_1.getAppConfig();
|
|
@@ -141,7 +141,7 @@ var UserRolesAdd = /** @class */ (function (_super) {
|
|
|
141
141
|
" (separated by a new line)"),
|
|
142
142
|
react_1.default.createElement(react_bootstrap_1.FormControl, { type: "text", as: "textarea", name: "account", "aria-label": "The account names to add", onChange: this.updateIdentifiers, value: identifiers, placeholder: domainIdentifier_1.getDomainIdentifierTypeString(), disabled: disabled }))),
|
|
143
143
|
react_1.default.createElement(react_bootstrap_1.Col, { xs: 12, sm: 4 },
|
|
144
|
-
react_1.default.createElement(Select_1.RoleSelect, { options: roles, value: role, onChange: this.updateRole, labelVisible: true, popoverContentComponent:
|
|
144
|
+
react_1.default.createElement(Select_1.RoleSelect, { options: roles, value: role, onChange: this.updateRole, labelVisible: true, popoverContentComponent: rolePopoverContent, textForRole: textForRole })),
|
|
145
145
|
react_1.default.createElement(react_bootstrap_1.Col, { xs: 12, sm: 2, className: "mt3-ns pt2-ns" },
|
|
146
146
|
isAddingUsersToRole && react_1.default.createElement(Inline_1.RefreshIndicatorInline, { className: "mr3" }),
|
|
147
147
|
!isAddingUsersToRole && (react_1.default.createElement(Button_1.default, { id: "userRolesAddButton", color: "primary", className: "btn-primary w-100-lt-xs", disabled: !identifiers || disabled, onClick: this.handleSubmit },
|
|
@@ -26,9 +26,9 @@ exports.RoleCell = void 0;
|
|
|
26
26
|
var core_1 = require("@material-ui/core");
|
|
27
27
|
var Delete_1 = __importDefault(require("@material-ui/icons/Delete"));
|
|
28
28
|
var react_1 = __importStar(require("react"));
|
|
29
|
-
var react_bootstrap_1 = require("react-bootstrap");
|
|
30
29
|
var react_redux_1 = require("react-redux");
|
|
31
30
|
var userRole_1 = require("../../utils/userRole");
|
|
31
|
+
var AccessibleOverlayTrigger_1 = require("../AccessibleOverlayTrigger");
|
|
32
32
|
var IconExternalUser_1 = require("../Icons/IconExternalUser");
|
|
33
33
|
var Inline_1 = require("../RefreshIndicator/Inline");
|
|
34
34
|
var Context_1 = require("./Context");
|
|
@@ -45,7 +45,6 @@ var RoleCell = function (_a) {
|
|
|
45
45
|
return (react_1.default.createElement("ul", { className: "mb0 list pa0 tr" }, user.roles.sort(userRole_1.sortByRole(roles)).map(function (userRole) {
|
|
46
46
|
var roleText = userRole_1.getRoleText(textForRole)(userRole);
|
|
47
47
|
var isUserRoleExternal = userRole_1.isExternal(userRole);
|
|
48
|
-
var userId = userRole_1.getUserId(userRole);
|
|
49
48
|
var canUpdate =
|
|
50
49
|
// current user has modify access
|
|
51
50
|
canModify &&
|
|
@@ -77,7 +76,7 @@ var RoleCell = function (_a) {
|
|
|
77
76
|
!canModify ||
|
|
78
77
|
// update is disabled
|
|
79
78
|
isUpdateDisabled;
|
|
80
|
-
var
|
|
79
|
+
var isExternalPopoverContent = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
81
80
|
react_1.default.createElement("h3", null, "Added via Roster Sync"),
|
|
82
81
|
react_1.default.createElement("p", { className: "mb2" }, "This person was added automatically via roster sync and cannot be manually removed.")));
|
|
83
82
|
var isUserRoleUpdating = isUpdating && (userRoleToUpdate === null || userRoleToUpdate === void 0 ? void 0 : userRoleToUpdate.id) === userRole.id;
|
|
@@ -91,7 +90,7 @@ var RoleCell = function (_a) {
|
|
|
91
90
|
react_1.default.createElement(Inline_1.RefreshIndicatorInline, { size: 20, className: "ma3" }))) : canDelete ? (react_1.default.createElement(core_1.IconButton, { className: "remove-user-button", "aria-label": "Remove " + roleText, onClick: function () {
|
|
92
91
|
removeUserRole(userRole);
|
|
93
92
|
}, disabled: isUpdating || isRemoving },
|
|
94
|
-
react_1.default.createElement(Delete_1.default, { color: "error" }))) : isUserRoleExternal ? (react_1.default.createElement(
|
|
93
|
+
react_1.default.createElement(Delete_1.default, { color: "error" }))) : isUserRoleExternal ? (react_1.default.createElement(AccessibleOverlayTrigger_1.AccessibleOverlayTrigger, { placement: "auto", trigger: ['hover', 'focus'], overlay: isExternalPopoverContent },
|
|
95
94
|
react_1.default.createElement(IconExternalUser_1.IconExternalUser, { tabIndex: 0, style: { margin: '12px', fill: '#949494' }, className: "external-icon", titleAccess: "External Role" }))) : (
|
|
96
95
|
// dummy spacer to keep items aligned
|
|
97
96
|
react_1.default.createElement("span", { style: {
|
|
@@ -30,6 +30,7 @@ var Help_1 = __importDefault(require("@material-ui/icons/Help"));
|
|
|
30
30
|
var react_1 = __importDefault(require("react"));
|
|
31
31
|
var react_bootstrap_1 = require("react-bootstrap");
|
|
32
32
|
var baseRole_1 = require("../../utils/baseRole");
|
|
33
|
+
var AccessibleOverlayTrigger_1 = require("../AccessibleOverlayTrigger");
|
|
33
34
|
var label = function (hasMultipleOptions, labelVisible, hasTooltip, ref) {
|
|
34
35
|
var content = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
35
36
|
"Role",
|
|
@@ -39,7 +40,7 @@ var label = function (hasMultipleOptions, labelVisible, hasTooltip, ref) {
|
|
|
39
40
|
};
|
|
40
41
|
var overlay = function (hasMultipleOptions, labelVisible, rolePopover) {
|
|
41
42
|
if (labelVisible === void 0) { labelVisible = false; }
|
|
42
|
-
return rolePopover ? (react_1.default.createElement(
|
|
43
|
+
return rolePopover ? (react_1.default.createElement(AccessibleOverlayTrigger_1.AccessibleOverlayTrigger, { placement: "right", trigger: ['hover', 'focus'], overlay: rolePopover }, function (_a) {
|
|
43
44
|
var ref = _a.ref, triggerHandler = __rest(_a, ["ref"]);
|
|
44
45
|
return (react_1.default.createElement("span", __assign({}, triggerHandler), label(hasMultipleOptions, labelVisible, true, ref)));
|
|
45
46
|
})) : (label(hasMultipleOptions, labelVisible, false));
|
|
@@ -107,5 +107,5 @@ export declare class UserRoles extends Component<UserRolesProps, UserRolesState>
|
|
|
107
107
|
render(): React.JSX.Element;
|
|
108
108
|
}
|
|
109
109
|
export declare const mapStateToProps: (state: BaseReduxState, ownProps: UserRolesOwnProps) => UserRolesReduxProps;
|
|
110
|
-
declare const _default: import("react-redux").ConnectedComponent<typeof UserRoles, Pick<React.ClassAttributes<UserRoles> & UserRolesProps, "guid" | "ref" | "modelName" | "pathParams" | "queryParams" | "externalProviders" | "
|
|
110
|
+
declare const _default: import("react-redux").ConnectedComponent<typeof UserRoles, Pick<React.ClassAttributes<UserRoles> & UserRolesProps, "guid" | "ref" | "modelName" | "pathParams" | "queryParams" | "externalProviders" | "load" | "key" | "readOnly" | "model" | "entityName" | "disableAutoLoad" | "disableAutoLoadOnParamsChange" | "modelArray" | "stopPeriodicLoad" | "create" | "update" | "delete" | "modelStatus" | "previousModelStatus" | "fetchingId" | "textForRole" | "defaultRole" | "roleDescriptions" | "renderAddDescription" | "isUpdateDisabled" | "isDeleteDisabled" | "allowMultipleRoles" | "requiredRole" | "isAddDisabled" | "modifyUserRoleActivityName" | "deleteOwnUserRoleActivityName" | "addRoleExcludeList" | "entity" | "filterUsers" | "onAdd" | "onUpdate" | "onRemove" | "renderTableDescription" | "lowercaseTextForRole" | "singularArticleForRole"> & UserRolesOwnProps>;
|
|
111
111
|
export default _default;
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
box-shadow: none;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
.form-control:focus,
|
|
13
|
+
.form-control:focus,
|
|
14
|
+
.MuiInputBase-input:focus {
|
|
14
15
|
border-color: var(--color-focus-border);
|
|
15
16
|
box-shadow: var(--box-shadow-focus-shadow);
|
|
16
|
-
transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
|
|
17
|
+
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
select.form-control {
|
|
@@ -44,10 +44,6 @@
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.ql-toolbar.ql-snow {
|
|
48
|
-
border-color: var(--color-medium-dark-grey);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
47
|
/* Expandable toolbar */
|
|
52
48
|
|
|
53
49
|
.more-options {
|
|
@@ -87,6 +83,7 @@
|
|
|
87
83
|
/* Toolbar */
|
|
88
84
|
|
|
89
85
|
.ql-toolbar.ql-snow {
|
|
86
|
+
border-color: var(--color-medium-dark-grey);
|
|
90
87
|
padding: 0.6rem;
|
|
91
88
|
|
|
92
89
|
&.disabled-invisible {
|
|
@@ -302,7 +299,7 @@
|
|
|
302
299
|
z-index: 1;
|
|
303
300
|
|
|
304
301
|
& .ql-container.ql-snow {
|
|
305
|
-
border-color:
|
|
302
|
+
border-color: var(--color-focus-border);
|
|
306
303
|
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
|
307
304
|
}
|
|
308
305
|
}
|
package/lib/utils/date.d.ts
CHANGED
|
@@ -157,6 +157,4 @@ export declare function getFullFormattedTimeZone(timeZoneId?: string, showEaster
|
|
|
157
157
|
* @param dateTimeUtc The date to format.
|
|
158
158
|
*/
|
|
159
159
|
export declare function getFormattedTimeZone(dateTimeUtc: string): string;
|
|
160
|
-
export declare const isDateInputSupported: boolean;
|
|
161
|
-
export declare const isTimeInputSupported: boolean;
|
|
162
160
|
export declare function isDateTimeValid(dateTime: string | Date): boolean;
|
package/lib/utils/date.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isDateTimeValid = exports.
|
|
6
|
+
exports.isDateTimeValid = exports.getFormattedTimeZone = exports.getFullFormattedTimeZone = exports.getFormattedNumberedTimeWithoutZoneOrMeridian = exports.getFormattedNumberedTimeWithoutZone = exports.getFormattedNumberedTimeWithFullZone = exports.getFormattedNumberedTime = exports.getFormattedNumberedDateWithoutYear = exports.getFormattedNumberedDateForInput = exports.getFormattedNumberedDateWithFullYear = exports.getFormattedNumberedDate = exports.getFormattedSimplifiedDateWithYearIfNotCurrent = exports.getFormattedSimplifiedDateWithoutYear = exports.getFormattedSimplifiedDate = exports.getFormattedNumberedDateAndTimeWithoutYear = exports.getFormattedNumberedDateAndTime = exports.getFormattedFullDateWithWeek = exports.getFormattedFullDateAndTime = exports.isNowBeforeDate = exports.isNowAfterDate = exports.isNowEqualOrBeforeDate = exports.isNowEqualOrAfterDate = exports.getEndOfMinute = exports.getEndOfDay = exports.getDateMinusTime = exports.getLocalDateTimeFromUtc = exports.getLocalMomentFromUtc = exports.getZonedMomentFromLocalDateTime = exports.getZonedMomentFromUtcInDefaultZone = exports.getZonedMomentFromUtc = exports.getOffsetDate = exports.getServerNowUtc = exports.setClockOffset = void 0;
|
|
7
7
|
var moment_timezone_1 = __importDefault(require("moment-timezone"));
|
|
8
8
|
var moment_timezone_utils_1 = __importDefault(require("moment-timezone/moment-timezone-utils"));
|
|
9
9
|
var timezone_1 = require("./timezone");
|
|
@@ -382,19 +382,6 @@ function applyFormat(dateTimeUtc, format, timeZoneId) {
|
|
|
382
382
|
if (timeZoneId === void 0) { timeZoneId = timezone_1.guessTimeZoneId(); }
|
|
383
383
|
return exports.getZonedMomentFromUtc(dateTimeUtc, timeZoneId).format(format);
|
|
384
384
|
}
|
|
385
|
-
var isInputTypeSupported = function (type) {
|
|
386
|
-
try {
|
|
387
|
-
var test_1 = document.createElement('input');
|
|
388
|
-
test_1.type = type;
|
|
389
|
-
var isSupported = test_1.type === type;
|
|
390
|
-
return isSupported;
|
|
391
|
-
}
|
|
392
|
-
catch (e) {
|
|
393
|
-
return false;
|
|
394
|
-
}
|
|
395
|
-
};
|
|
396
|
-
exports.isDateInputSupported = isInputTypeSupported('date');
|
|
397
|
-
exports.isTimeInputSupported = isInputTypeSupported('time');
|
|
398
385
|
function isDateTimeValid(dateTime) {
|
|
399
386
|
return !!dateTime && moment_timezone_1.default(dateTime).isValid();
|
|
400
387
|
}
|
package/lib/utils/shard.js
CHANGED
|
@@ -30,7 +30,7 @@ function getShardKey(host, localhostShardKey) {
|
|
|
30
30
|
lodash_1.default.includes(finalHost, 'web.core.windows.net') ||
|
|
31
31
|
lodash_1.default.includes(finalHost, 'azureedge.net') ||
|
|
32
32
|
lodash_1.default.includes(finalHost, 'z01.azurefd.net') ||
|
|
33
|
-
lodash_1.default.includes(finalHost, 'ngrok
|
|
33
|
+
lodash_1.default.includes(finalHost, 'ngrok')) {
|
|
34
34
|
return shard_1.SHARD.PURDUE;
|
|
35
35
|
}
|
|
36
36
|
var urlParts = finalHost.split('.');
|
package/package.json
CHANGED