@webiny/app-admin 5.29.0-beta.2 → 5.30.0-beta.1
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/components/AppInstaller/Sidebar.js +15 -20
- package/components/AppInstaller/Sidebar.js.map +1 -1
- package/components/AppInstaller/styled.js +5 -4
- package/components/AppInstaller/styled.js.map +1 -1
- package/components/FileManager/FileDetails/Tags.js +2 -1
- package/components/FileManager/FileDetails/Tags.js.map +1 -1
- package/components/RichTextEditor/tools/image/ui.d.ts +1 -1
- package/components/RichTextEditor/tools/textColor/index.d.ts +1 -0
- package/components/SplitView/SplitView.js +5 -9
- package/components/SplitView/SplitView.js.map +1 -1
- package/package.json +17 -17
- package/styles/material-theme-assignments.scss +78 -66
- package/styles/material.scss +2 -1
- package/ui/elements/ButtonElement.js +4 -1
- package/ui/elements/ButtonElement.js.map +1 -1
- package/ui/elements/form/InputElement.js +1 -0
- package/ui/elements/form/InputElement.js.map +1 -1
|
@@ -11,35 +11,29 @@ exports.default = void 0;
|
|
|
11
11
|
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
|
|
14
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
|
+
|
|
14
16
|
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
15
17
|
|
|
16
18
|
var _Typography = require("@webiny/ui/Typography");
|
|
17
19
|
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
var _webinyOrangeLogo = _interopRequireDefault(require("../../assets/images/webiny-orange-logo.svg"));
|
|
20
|
+
var _config = require("@webiny/app/config");
|
|
21
21
|
|
|
22
22
|
var _signInDivider = _interopRequireDefault(require("./assets/sign-in-divider.svg"));
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _Brand = require("../../base/ui/Brand");
|
|
25
|
+
|
|
26
|
+
var _Tags = require("../../base/ui/Tags");
|
|
25
27
|
|
|
26
|
-
var SidebarWrapper = /*#__PURE__*/(0, _styled.default)("div", {
|
|
27
|
-
target: "eu74ttw0",
|
|
28
|
-
label: "SidebarWrapper"
|
|
29
|
-
})({});
|
|
30
28
|
var Logo = /*#__PURE__*/(0, _styled.default)("div", {
|
|
31
|
-
target: "
|
|
29
|
+
target: "eu74ttw0",
|
|
32
30
|
label: "Logo"
|
|
33
31
|
})({
|
|
34
32
|
padding: 15,
|
|
35
|
-
borderBottom: "1px solid var(--mdc-theme-background)"
|
|
36
|
-
img: {
|
|
37
|
-
width: "100px",
|
|
38
|
-
height: "auto"
|
|
39
|
-
}
|
|
33
|
+
borderBottom: "1px solid var(--mdc-theme-background)"
|
|
40
34
|
});
|
|
41
35
|
var List = /*#__PURE__*/(0, _styled.default)("ul", {
|
|
42
|
-
target: "
|
|
36
|
+
target: "eu74ttw1",
|
|
43
37
|
label: "List"
|
|
44
38
|
})({
|
|
45
39
|
li: {
|
|
@@ -87,7 +81,7 @@ var List = /*#__PURE__*/(0, _styled.default)("ul", {
|
|
|
87
81
|
}
|
|
88
82
|
});
|
|
89
83
|
var Note = /*#__PURE__*/(0, _styled.default)("div", {
|
|
90
|
-
target: "
|
|
84
|
+
target: "eu74ttw2",
|
|
91
85
|
label: "Note"
|
|
92
86
|
})({
|
|
93
87
|
padding: 15
|
|
@@ -163,10 +157,11 @@ var Sidebar = function Sidebar(_ref) {
|
|
|
163
157
|
|
|
164
158
|
var wbyVersion = _config.config.getKey("WEBINY_VERSION", process.env.REACT_APP_WEBINY_VERSION);
|
|
165
159
|
|
|
166
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
160
|
+
return /*#__PURE__*/_react.default.createElement(_Tags.Tags, {
|
|
161
|
+
tags: {
|
|
162
|
+
location: "installer"
|
|
163
|
+
}
|
|
164
|
+
}, /*#__PURE__*/_react.default.createElement(Logo, null, /*#__PURE__*/_react.default.createElement(_Brand.Brand, null)), upgrades.length > 0 ? /*#__PURE__*/_react.default.createElement(Installations, {
|
|
170
165
|
title: /*#__PURE__*/_react.default.createElement("span", null, "The following apps will be upgraded to ", /*#__PURE__*/_react.default.createElement("strong", null, wbyVersion), ":"),
|
|
171
166
|
allInstallers: upgrades,
|
|
172
167
|
installer: installer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["Logo","styled","padding","borderBottom","List","li","display","alignItems","borderRadius","height","width","marginRight","textAlign","lineHeight","fontSize","paddingTop","color","img","backgroundColor","fontWeight","Note","Installations","props","title","allInstallers","installer","showLogin","renderList","loginItem","signInDivider","items","i","length","name","secure","installed","prev","push","active","classSet","pending","Sidebar","upgrades","filter","type","installations","wbyVersion","appConfig","getKey","process","env","REACT_APP_WEBINY_VERSION","location"],"sources":["Sidebar.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport classSet from \"classnames\";\nimport styled from \"@emotion/styled\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { config as appConfig } from \"@webiny/app/config\";\nimport signInDivider from \"./assets/sign-in-divider.svg\";\nimport { Installer } from \"./useInstaller\";\nimport { Brand } from \"~/base/ui/Brand\";\nimport { Tags } from \"~/base/ui/Tags\";\n\nconst Logo = styled(\"div\")({\n padding: 15,\n borderBottom: \"1px solid var(--mdc-theme-background)\"\n});\n\nconst List = styled(\"ul\")({\n li: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"15px 15px\",\n \".status\": {\n borderRadius: \"50%\",\n display: \"inline-block\",\n height: 20,\n width: 20,\n marginRight: 15\n },\n \"&.sign-in\": {\n display: \"block\",\n textAlign: \"center\",\n \".note\": {\n display: \"inline-block\",\n lineHeight: \"150%\",\n fontSize: 10,\n paddingTop: 10,\n color: \"var(--mdc-theme-text-icon-on-background)\"\n },\n img: {\n width: \"100%\"\n }\n },\n \"&.active\": {\n backgroundColor: \"var(--mdc-theme-background)\",\n fontWeight: 600,\n \".status\": {\n backgroundColor: \"var(--mdc-theme-primary)\"\n }\n },\n \"&.pending\": {\n \".status\": {\n backgroundColor: \"var(--mdc-theme-on-surface)\"\n }\n },\n \"&.installed\": {\n \".status\": {\n backgroundColor: \"var(--mdc-theme-secondary)\"\n }\n }\n }\n});\n\nconst Note = styled(\"div\")({\n padding: 15\n});\ninterface InstallationsProps {\n title: React.ReactNode;\n allInstallers: Installer[];\n installer: Installer;\n showLogin: boolean;\n}\nconst Installations: React.FC<InstallationsProps> = props => {\n const { title, allInstallers, installer, showLogin } = props;\n const renderList = () => {\n const loginItem = (\n <li key={\"login\"} className={\"sign-in\"}>\n <img src={signInDivider} alt={\"\"} />\n <Typography use={\"overline\"} className={\"note\"}>\n TO CONTINUE THE INSTALLATION AFTER THIS POINT YOU’LL NEED TO SIGN IN\n </Typography>\n </li>\n );\n\n const items = [];\n for (let i = 0; i < allInstallers.length; i++) {\n const { name, title, secure, installed } = allInstallers[i];\n const prev = i === 0 ? null : allInstallers[i - 1];\n if ((!prev || !prev.secure) && secure && showLogin) {\n items.push(loginItem);\n }\n\n const active = installer && !showLogin && name === installer.name;\n\n items.push(\n <li\n key={name}\n className={classSet(\n { installed: installed },\n { active: active },\n { pending: !installed && !active }\n )}\n >\n <span className={\"status\"} />\n <span className={\"title\"}>{title}</span>\n </li>\n );\n }\n return items;\n };\n\n return (\n <Fragment>\n <Note>\n <Typography use={\"body1\"}>{title}</Typography>\n </Note>\n <List>{renderList()}</List>\n </Fragment>\n );\n};\n\ninterface SidebarProps {\n allInstallers: Installer[];\n installer: Installer;\n showLogin: boolean;\n}\n\nconst Sidebar: React.FC<SidebarProps> = ({ allInstallers, installer, showLogin }) => {\n const upgrades = allInstallers.filter(installer => installer.type === \"upgrade\");\n const installations = allInstallers.filter(installer => installer.type === \"install\");\n const wbyVersion = appConfig.getKey(\"WEBINY_VERSION\", process.env.REACT_APP_WEBINY_VERSION);\n\n return (\n <Tags tags={{ location: \"installer\" }}>\n <Logo>\n <Brand />\n </Logo>\n {upgrades.length > 0 ? (\n <Installations\n title={\n <span>\n The following apps will be upgraded to <strong>{wbyVersion}</strong>:\n </span>\n }\n allInstallers={upgrades}\n installer={installer}\n showLogin={showLogin}\n />\n ) : null}\n {installations.length > 0 && (\n <Installations\n title={\"The following apps will be installed and configured:\"}\n allInstallers={installations}\n installer={installer}\n showLogin={upgrades.length > 0 ? false : showLogin}\n />\n )}\n </Tags>\n );\n};\nexport default Sidebar;\n"],"mappings":"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"}
|
|
@@ -55,11 +55,12 @@ var InstallContent = /*#__PURE__*/(0, _styled.default)("div", {
|
|
|
55
55
|
});
|
|
56
56
|
exports.InstallContent = InstallContent;
|
|
57
57
|
var installerSplitView = /*#__PURE__*/(0, _emotion.css)({
|
|
58
|
+
// height: "100vh",
|
|
58
59
|
".webiny-split-view__inner": {
|
|
59
|
-
height: "100vh"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
height: "100vh"
|
|
61
|
+
},
|
|
62
|
+
".webiny-split-view__right-panel-wrapper": {
|
|
63
|
+
height: "100vh"
|
|
63
64
|
}
|
|
64
65
|
}, "label:installerSplitView;");
|
|
65
66
|
exports.installerSplitView = installerSplitView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Wrapper","styled","display","flexDirection","justifyContent","minHeight","color","whiteSpace","ul","listStyle","paddingLeft","li","MozOsxFontSmoothing","WebkitFontSmoothing","fontSize","lineHeight","fontWeight","letterSpacing","textDecoration","textTransform","marginTop","marginBottom","InstallContent","maxWidth","margin","borderRadius","boxShadow","installerSplitView","css","height","SuccessDialog","padding","textAlign","p","paddingBottom","InnerContent","position","alertClass","borderLeft"],"sources":["styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { css } from \"emotion\";\n\nexport const Wrapper = styled(\"section\")({\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n minHeight: \"100vh\",\n color: \"var(--mdc-theme-on-surface)\",\n \".spinner__inner-wrapper\": {\n whiteSpace: \"nowrap\"\n },\n ul: {\n listStyle: \"disc\",\n paddingLeft: \"var(--mdc-layout-grid-margin-desktop, 24px)\",\n li: {\n color: \"var(--desktop-color, var(--webiny-theme-color-text-primary, rgb(10, 10, 10)))\",\n MozOsxFontSmoothing: \"grayscale\",\n WebkitFontSmoothing: \"antialiased\",\n fontSize: \"1rem\",\n lineHeight: \"1.5rem\",\n fontWeight: 400,\n letterSpacing: \"0.03125em\",\n textDecoration: \"inherit\",\n textTransform: \"inherit\",\n marginTop: \"20px\",\n marginBottom: \"20px\"\n }\n }\n});\n\nexport const InstallContent = styled(\"div\")({\n maxWidth: 800,\n margin: \"0 auto 25px auto\",\n \".mdc-elevation--z2\": {\n borderRadius: 4,\n boxShadow: \"0 1px 3px 0 rgba(0,0,0,0.15)\"\n }\n});\n\nexport const installerSplitView = css({\n \".webiny-split-view__inner\": {\n height: \"100vh\",\n
|
|
1
|
+
{"version":3,"names":["Wrapper","styled","display","flexDirection","justifyContent","minHeight","color","whiteSpace","ul","listStyle","paddingLeft","li","MozOsxFontSmoothing","WebkitFontSmoothing","fontSize","lineHeight","fontWeight","letterSpacing","textDecoration","textTransform","marginTop","marginBottom","InstallContent","maxWidth","margin","borderRadius","boxShadow","installerSplitView","css","height","SuccessDialog","padding","textAlign","p","paddingBottom","InnerContent","position","alertClass","borderLeft"],"sources":["styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { css } from \"emotion\";\n\nexport const Wrapper = styled(\"section\")({\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n minHeight: \"100vh\",\n color: \"var(--mdc-theme-on-surface)\",\n \".spinner__inner-wrapper\": {\n whiteSpace: \"nowrap\"\n },\n ul: {\n listStyle: \"disc\",\n paddingLeft: \"var(--mdc-layout-grid-margin-desktop, 24px)\",\n li: {\n color: \"var(--desktop-color, var(--webiny-theme-color-text-primary, rgb(10, 10, 10)))\",\n MozOsxFontSmoothing: \"grayscale\",\n WebkitFontSmoothing: \"antialiased\",\n fontSize: \"1rem\",\n lineHeight: \"1.5rem\",\n fontWeight: 400,\n letterSpacing: \"0.03125em\",\n textDecoration: \"inherit\",\n textTransform: \"inherit\",\n marginTop: \"20px\",\n marginBottom: \"20px\"\n }\n }\n});\n\nexport const InstallContent = styled(\"div\")({\n maxWidth: 800,\n margin: \"0 auto 25px auto\",\n \".mdc-elevation--z2\": {\n borderRadius: 4,\n boxShadow: \"0 1px 3px 0 rgba(0,0,0,0.15)\"\n }\n});\n\nexport const installerSplitView = css({\n // height: \"100vh\",\n \".webiny-split-view__inner\": {\n height: \"100vh\"\n },\n \".webiny-split-view__right-panel-wrapper\": {\n height: \"100vh\"\n }\n});\n\nexport const SuccessDialog = styled(\"div\")({\n padding: 40,\n textAlign: \"center\",\n p: {\n paddingBottom: 40\n }\n});\n\nexport const InnerContent = styled(\"div\")({\n padding: 25,\n position: \"relative\"\n});\n\nexport const alertClass = css({\n borderLeft: \"3px solid red\",\n margin: \"5px 0 15px 0\",\n padding: \"2px 0 2px 10px\"\n});\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEO,IAAMA,OAAO,oBAAGC,eAAH,EAAU,SAAV;EAAA;EAAA;AAAA,GAAqB;EACrCC,OAAO,EAAE,MAD4B;EAErCC,aAAa,EAAE,QAFsB;EAGrCC,cAAc,EAAE,QAHqB;EAIrCC,SAAS,EAAE,OAJ0B;EAKrCC,KAAK,EAAE,6BAL8B;EAMrC,2BAA2B;IACvBC,UAAU,EAAE;EADW,CANU;EASrCC,EAAE,EAAE;IACAC,SAAS,EAAE,MADX;IAEAC,WAAW,EAAE,6CAFb;IAGAC,EAAE,EAAE;MACAL,KAAK,EAAE,+EADP;MAEAM,mBAAmB,EAAE,WAFrB;MAGAC,mBAAmB,EAAE,aAHrB;MAIAC,QAAQ,EAAE,MAJV;MAKAC,UAAU,EAAE,QALZ;MAMAC,UAAU,EAAE,GANZ;MAOAC,aAAa,EAAE,WAPf;MAQAC,cAAc,EAAE,SARhB;MASAC,aAAa,EAAE,SATf;MAUAC,SAAS,EAAE,MAVX;MAWAC,YAAY,EAAE;IAXd;EAHJ;AATiC,CAArB,CAAb;;AA4BA,IAAMC,cAAc,oBAAGrB,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACxCsB,QAAQ,EAAE,GAD8B;EAExCC,MAAM,EAAE,kBAFgC;EAGxC,sBAAsB;IAClBC,YAAY,EAAE,CADI;IAElBC,SAAS,EAAE;EAFO;AAHkB,CAAjB,CAApB;;AASA,IAAMC,kBAAkB,gBAAG,IAAAC,YAAA,EAAI;EAClC;EACA,6BAA6B;IACzBC,MAAM,EAAE;EADiB,CAFK;EAKlC,2CAA2C;IACvCA,MAAM,EAAE;EAD+B;AALT,CAAJ,8BAA3B;;AAUA,IAAMC,aAAa,oBAAG7B,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACvC8B,OAAO,EAAE,EAD8B;EAEvCC,SAAS,EAAE,QAF4B;EAGvCC,CAAC,EAAE;IACCC,aAAa,EAAE;EADhB;AAHoC,CAAjB,CAAnB;;AAQA,IAAMC,YAAY,oBAAGlC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACtC8B,OAAO,EAAE,EAD6B;EAEtCK,QAAQ,EAAE;AAF4B,CAAjB,CAAlB;;AAKA,IAAMC,UAAU,gBAAG,IAAAT,YAAA,EAAI;EAC1BU,UAAU,EAAE,eADc;EAE1Bd,MAAM,EAAE,cAFkB;EAG1BO,OAAO,EAAE;AAHiB,CAAJ,sBAAnB"}
|
|
@@ -174,7 +174,8 @@ var Tags = function Tags(_ref) {
|
|
|
174
174
|
return /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
|
|
175
175
|
className: addTagsStyle,
|
|
176
176
|
onClick: handleEdit,
|
|
177
|
-
disabled: !isEditingAllowed
|
|
177
|
+
disabled: !isEditingAllowed,
|
|
178
|
+
"data-testid": "fm.tags.add"
|
|
178
179
|
}, "Add tags...");
|
|
179
180
|
}, [editing, isEditingAllowed]);
|
|
180
181
|
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","useApolloClient","useState","editing","setEdit","saving","setSaving","Array","isArray","initialTags","setInitialTags","useSnackbar","showSnackbar","useFileManager","queryParams","handleEdit","useCallback","listTagsQuery","useQuery","LIST_TAGS","variables","where","getWhere","listTags","get","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","index","label","name","mutate","mutation","UPDATE_FILE","id","update","cache","updated","newFileData","cloneDeep","readQuery","query","LIST_FILES","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","set","then","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps","ev"],"sources":["Tags.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useApolloClient, useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { getWhere, useFileManager } from \"./../FileManagerContext\";\nimport {\n UPDATE_FILE,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\n\nconst SCOPE_SEPARATOR = \":\";\n\nexport const formatTagAsLabel = (tag: string, scope: string | undefined) => {\n if (!scope) {\n return tag;\n }\n return tag.replace(`${scope}${SCOPE_SEPARATOR}`, \"\");\n};\n\nexport const tagWithoutScopePrefix = (tags: string[], scope: string) => {\n return tags.filter(tag => tag !== scope).map(tag => formatTagAsLabel(tag, scope));\n};\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\n\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const client = useApolloClient();\n\n const [editing, setEdit] = useState(false);\n const [saving, setSaving] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS, {\n variables: { where: getWhere(queryParams.scope) }\n });\n const listTags = get(listTagsQuery, \"data.fileManager.listTags\", []);\n const allTags = tagWithoutScopePrefix(listTags, queryParams.scope);\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: { tags: { name: string }[] } }) => {\n if (editing) {\n return null;\n }\n const hasTags = data.tags.length > 0;\n\n if (hasTags) {\n // Render existing tags and \"edit tags\" action.\n return (\n <>\n <Chips className={classNames(\"list-item__content\", chipsStyle)}>\n {data.tags\n .filter(tag => tag !== queryParams.scope)\n .map((tag, index) => {\n const label = typeof tag === \"string\" ? tag : tag.name;\n return (\n <Chip\n key={label + index}\n label={formatTagAsLabel(label, queryParams.scope)}\n />\n );\n })}\n </Chips>\n {isEditingAllowed && (\n <IconButton\n className={iconButtonStyle}\n icon={<EditIcon />}\n onClick={handleEdit}\n />\n )}\n </>\n );\n }\n // Render \"add tags\" action.\n return (\n <ButtonDefault\n className={addTagsStyle}\n onClick={handleEdit}\n disabled={!isEditingAllowed}\n >\n Add tags...\n </ButtonDefault>\n );\n },\n [editing, isEditingAllowed]\n );\n\n return (\n <Form\n data={{\n tags: initialTags\n }}\n onSubmit={async ({ tags }) => {\n setSaving(true);\n client\n .mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data: { tags }\n },\n update: (cache, updated) => {\n const newFileData: FileItem = get(\n updated,\n \"data.fileManager.updateFile.data\"\n );\n\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === newFileData.key) {\n item.tags = newFileData.tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(newFileData.tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) }\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...newFileData.tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) },\n data: listTagsData\n });\n }\n }\n })\n .then(() => {\n setInitialTags(tags);\n setSaving(false);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n });\n }}\n >\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({\n // TODO @ts-refactor\n // @ts-ignore\n data\n })}\n </li-title>\n {editing && (\n <li-content>\n <Bind\n name={\"tags\"}\n beforeChange={(\n tags: string[],\n baseOnChange: (tags: string[]) => void\n ) => {\n const formattedTags = tags.map(tag => {\n const tagInLowerCase = tag.toLowerCase();\n /**\n * If \"scope\" exists, prefix tag with \"scope\" if not already.\n */\n if (\n queryParams.scope &&\n !tagInLowerCase.startsWith(queryParams.scope)\n ) {\n return `${queryParams.scope}${SCOPE_SEPARATOR}${tagInLowerCase}`;\n }\n return tagInLowerCase;\n });\n baseOnChange(formattedTags);\n }}\n >\n {({ value, ...bindProps }) => (\n <MultiAutoComplete\n {...bindProps}\n value={tagWithoutScopePrefix(value, queryParams.scope)}\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={saving}\n />\n )}\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={ev => {\n submit(ev);\n }}\n data-testid={\"fm.tags.submit\"}\n >\n Submit\n </ButtonPrimary>\n <ButtonSecondary\n small\n onClick={() => {\n setValue(\"tags\", initialTags);\n setEdit(false);\n }}\n >\n Cancel\n </ButtonSecondary>\n </div>\n </li-content>\n )}\n </React.Fragment>\n )}\n </Form>\n );\n};\n\nexport default Tags;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","useApolloClient","useState","editing","setEdit","saving","setSaving","Array","isArray","initialTags","setInitialTags","useSnackbar","showSnackbar","useFileManager","queryParams","handleEdit","useCallback","listTagsQuery","useQuery","LIST_TAGS","variables","where","getWhere","listTags","get","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","index","label","name","mutate","mutation","UPDATE_FILE","id","update","cache","updated","newFileData","cloneDeep","readQuery","query","LIST_FILES","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","set","then","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps","ev"],"sources":["Tags.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useApolloClient, useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { getWhere, useFileManager } from \"./../FileManagerContext\";\nimport {\n UPDATE_FILE,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\n\nconst SCOPE_SEPARATOR = \":\";\n\nexport const formatTagAsLabel = (tag: string, scope: string | undefined) => {\n if (!scope) {\n return tag;\n }\n return tag.replace(`${scope}${SCOPE_SEPARATOR}`, \"\");\n};\n\nexport const tagWithoutScopePrefix = (tags: string[], scope: string) => {\n return tags.filter(tag => tag !== scope).map(tag => formatTagAsLabel(tag, scope));\n};\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\n\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const client = useApolloClient();\n\n const [editing, setEdit] = useState(false);\n const [saving, setSaving] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS, {\n variables: { where: getWhere(queryParams.scope) }\n });\n const listTags = get(listTagsQuery, \"data.fileManager.listTags\", []);\n const allTags = tagWithoutScopePrefix(listTags, queryParams.scope);\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: { tags: { name: string }[] } }) => {\n if (editing) {\n return null;\n }\n const hasTags = data.tags.length > 0;\n\n if (hasTags) {\n // Render existing tags and \"edit tags\" action.\n return (\n <>\n <Chips className={classNames(\"list-item__content\", chipsStyle)}>\n {data.tags\n .filter(tag => tag !== queryParams.scope)\n .map((tag, index) => {\n const label = typeof tag === \"string\" ? tag : tag.name;\n return (\n <Chip\n key={label + index}\n label={formatTagAsLabel(label, queryParams.scope)}\n />\n );\n })}\n </Chips>\n {isEditingAllowed && (\n <IconButton\n className={iconButtonStyle}\n icon={<EditIcon />}\n onClick={handleEdit}\n />\n )}\n </>\n );\n }\n // Render \"add tags\" action.\n return (\n <ButtonDefault\n className={addTagsStyle}\n onClick={handleEdit}\n disabled={!isEditingAllowed}\n data-testid=\"fm.tags.add\"\n >\n Add tags...\n </ButtonDefault>\n );\n },\n [editing, isEditingAllowed]\n );\n\n return (\n <Form\n data={{\n tags: initialTags\n }}\n onSubmit={async ({ tags }) => {\n setSaving(true);\n client\n .mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data: { tags }\n },\n update: (cache, updated) => {\n const newFileData: FileItem = get(\n updated,\n \"data.fileManager.updateFile.data\"\n );\n\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === newFileData.key) {\n item.tags = newFileData.tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(newFileData.tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) }\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...newFileData.tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) },\n data: listTagsData\n });\n }\n }\n })\n .then(() => {\n setInitialTags(tags);\n setSaving(false);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n });\n }}\n >\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({\n // TODO @ts-refactor\n // @ts-ignore\n data\n })}\n </li-title>\n {editing && (\n <li-content>\n <Bind\n name={\"tags\"}\n beforeChange={(\n tags: string[],\n baseOnChange: (tags: string[]) => void\n ) => {\n const formattedTags = tags.map(tag => {\n const tagInLowerCase = tag.toLowerCase();\n /**\n * If \"scope\" exists, prefix tag with \"scope\" if not already.\n */\n if (\n queryParams.scope &&\n !tagInLowerCase.startsWith(queryParams.scope)\n ) {\n return `${queryParams.scope}${SCOPE_SEPARATOR}${tagInLowerCase}`;\n }\n return tagInLowerCase;\n });\n baseOnChange(formattedTags);\n }}\n >\n {({ value, ...bindProps }) => (\n <MultiAutoComplete\n {...bindProps}\n value={tagWithoutScopePrefix(value, queryParams.scope)}\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={saving}\n />\n )}\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={ev => {\n submit(ev);\n }}\n data-testid={\"fm.tags.submit\"}\n >\n Submit\n </ButtonPrimary>\n <ButtonSecondary\n small\n onClick={() => {\n setValue(\"tags\", initialTags);\n setEdit(false);\n }}\n >\n Cancel\n </ButtonSecondary>\n </div>\n </li-content>\n )}\n </React.Fragment>\n )}\n </Form>\n );\n};\n\nexport default Tags;\n"],"mappings":"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"}
|
|
@@ -116,5 +116,5 @@ export default class Ui {
|
|
|
116
116
|
* @param {object} attributes - any attributes
|
|
117
117
|
* @returns {HTMLElement}
|
|
118
118
|
*/
|
|
119
|
-
export declare const make: (tagName: string, classNames?: string[] | string | null, attributes?: Record<string, string | number | boolean>
|
|
119
|
+
export declare const make: (tagName: string, classNames?: string[] | string | null, attributes?: Record<string, string | number | boolean>) => HTMLElement;
|
|
120
120
|
export {};
|
|
@@ -26,14 +26,12 @@ var _Helpers = require("@webiny/ui/Helpers");
|
|
|
26
26
|
var grid = /*#__PURE__*/(0, _emotion.css)({
|
|
27
27
|
"&.mdc-layout-grid": {
|
|
28
28
|
padding: 0,
|
|
29
|
-
backgroundColor: "var(--mdc-theme-background)"
|
|
29
|
+
backgroundColor: "var(--mdc-theme-background)",
|
|
30
|
+
">.mdc-layout-grid__inner": {
|
|
31
|
+
gridGap: 0
|
|
32
|
+
}
|
|
30
33
|
}
|
|
31
34
|
}, "label:grid;");
|
|
32
|
-
var gridInner = /*#__PURE__*/(0, _emotion.css)({
|
|
33
|
-
"&.mdc-layout-grid__inner": {
|
|
34
|
-
gridGap: 0
|
|
35
|
-
}
|
|
36
|
-
}, "label:gridInner;");
|
|
37
35
|
var RightPanelWrapper = /*#__PURE__*/(0, _styled.default)("div", {
|
|
38
36
|
target: "em0s1980",
|
|
39
37
|
label: "RightPanelWrapper"
|
|
@@ -64,9 +62,7 @@ exports.leftPanel = leftPanel;
|
|
|
64
62
|
var SplitView = function SplitView(props) {
|
|
65
63
|
return /*#__PURE__*/React.createElement(_Grid.Grid, {
|
|
66
64
|
className: (0, _classnames.default)(grid, props.className, "webiny-split-view")
|
|
67
|
-
},
|
|
68
|
-
className: gridInner + " webiny-split-view__inner"
|
|
69
|
-
}, props.children));
|
|
65
|
+
}, props.children);
|
|
70
66
|
};
|
|
71
67
|
|
|
72
68
|
exports.SplitView = SplitView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["grid","css","padding","backgroundColor","
|
|
1
|
+
{"version":3,"names":["grid","css","padding","backgroundColor","gridGap","RightPanelWrapper","styled","overflow","height","leftPanel","display","flexDirection","maxHeight","SplitView","props","classSet","className","children","LeftPanel","propList","hasOwnProperty","span","getClasses","RightPanel"],"sources":["SplitView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport classSet from \"classnames\";\nimport { Cell, Grid, CellProps } from \"@webiny/ui/Grid\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { clone } from \"lodash\";\nimport { getClasses } from \"@webiny/ui/Helpers\";\n\nconst grid = css({\n \"&.mdc-layout-grid\": {\n padding: 0,\n backgroundColor: \"var(--mdc-theme-background)\",\n \">.mdc-layout-grid__inner\": {\n gridGap: 0\n }\n }\n});\n\nconst RightPanelWrapper = styled(\"div\")({\n backgroundColor: \"var(--mdc-theme-background)\",\n overflow: \"auto\",\n height: \"calc(100vh - 70px)\"\n});\n\nexport const leftPanel = css({\n backgroundColor: \"var(--mdc-theme-surface)\",\n \">.webiny-data-list\": {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100vh - 70px)\",\n \".mdc-list\": {\n overflow: \"auto\"\n }\n },\n \">.mdc-list\": {\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"calc(100vh - 70px)\",\n overflow: \"auto\"\n }\n});\n\ninterface SplitViewProps {\n children: React.ReactElement<any> | React.ReactElement<any>[];\n className?: string;\n}\n\nconst SplitView: React.FC<SplitViewProps> = props => {\n return (\n <Grid className={classSet(grid, props.className, \"webiny-split-view\")}>\n {props.children}\n </Grid>\n );\n};\n\nconst LeftPanel: React.FC<CellProps> = props => {\n const propList = clone(props);\n if (!propList.hasOwnProperty(\"span\")) {\n propList.span = 5;\n }\n\n return (\n <Cell\n {...getClasses(\n propList,\n classSet(leftPanel, props.className, \"webiny-split-view__left-panel\")\n )}\n >\n {propList.children}\n </Cell>\n );\n};\n\nconst RightPanel: React.FC<CellProps> = props => {\n const propList = clone(props);\n if (!propList.hasOwnProperty(\"span\")) {\n propList.span = 7;\n }\n\n return (\n <Cell {...getClasses(propList, \"webiny-split-view__right-panel\")}>\n <RightPanelWrapper\n className={\"webiny-split-view__right-panel-wrapper\"}\n id={\"webiny-split-view-right-panel\"}\n >\n {propList.children}\n </RightPanelWrapper>\n </Cell>\n );\n};\n\nexport { SplitView, LeftPanel, RightPanel };\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEA,IAAMA,IAAI,gBAAG,IAAAC,YAAA,EAAI;EACb,qBAAqB;IACjBC,OAAO,EAAE,CADQ;IAEjBC,eAAe,EAAE,6BAFA;IAGjB,4BAA4B;MACxBC,OAAO,EAAE;IADe;EAHX;AADR,CAAJ,gBAAb;AAUA,IAAMC,iBAAiB,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACpCH,eAAe,EAAE,6BADmB;EAEpCI,QAAQ,EAAE,MAF0B;EAGpCC,MAAM,EAAE;AAH4B,CAAjB,CAAvB;AAMO,IAAMC,SAAS,gBAAG,IAAAR,YAAA,EAAI;EACzBE,eAAe,EAAE,0BADQ;EAEzB,sBAAsB;IAClBO,OAAO,EAAE,MADS;IAElBC,aAAa,EAAE,QAFG;IAGlBH,MAAM,EAAE,oBAHU;IAIlB,aAAa;MACTD,QAAQ,EAAE;IADD;EAJK,CAFG;EAUzB,cAAc;IACVG,OAAO,EAAE,MADC;IAEVC,aAAa,EAAE,QAFL;IAGVC,SAAS,EAAE,oBAHD;IAIVL,QAAQ,EAAE;EAJA;AAVW,CAAJ,qBAAlB;;;AAuBP,IAAMM,SAAmC,GAAG,SAAtCA,SAAsC,CAAAC,KAAK,EAAI;EACjD,oBACI,oBAAC,UAAD;IAAM,SAAS,EAAE,IAAAC,mBAAA,EAASf,IAAT,EAAec,KAAK,CAACE,SAArB,EAAgC,mBAAhC;EAAjB,GACKF,KAAK,CAACG,QADX,CADJ;AAKH,CAND;;;;AAQA,IAAMC,SAA8B,GAAG,SAAjCA,SAAiC,CAAAJ,KAAK,EAAI;EAC5C,IAAMK,QAAQ,GAAG,qBAAML,KAAN,CAAjB;;EACA,IAAI,CAACK,QAAQ,CAACC,cAAT,CAAwB,MAAxB,CAAL,EAAsC;IAClCD,QAAQ,CAACE,IAAT,GAAgB,CAAhB;EACH;;EAED,oBACI,oBAAC,UAAD,EACQ,IAAAC,mBAAA,EACAH,QADA,EAEA,IAAAJ,mBAAA,EAASN,SAAT,EAAoBK,KAAK,CAACE,SAA1B,EAAqC,+BAArC,CAFA,CADR,EAMKG,QAAQ,CAACF,QANd,CADJ;AAUH,CAhBD;;;;AAkBA,IAAMM,UAA+B,GAAG,SAAlCA,UAAkC,CAAAT,KAAK,EAAI;EAC7C,IAAMK,QAAQ,GAAG,qBAAML,KAAN,CAAjB;;EACA,IAAI,CAACK,QAAQ,CAACC,cAAT,CAAwB,MAAxB,CAAL,EAAsC;IAClCD,QAAQ,CAACE,IAAT,GAAgB,CAAhB;EACH;;EAED,oBACI,oBAAC,UAAD,EAAU,IAAAC,mBAAA,EAAWH,QAAX,EAAqB,gCAArB,CAAV,eACI,oBAAC,iBAAD;IACI,SAAS,EAAE,wCADf;IAEI,EAAE,EAAE;EAFR,GAIKA,QAAQ,CAACF,QAJd,CADJ,CADJ;AAUH,CAhBD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-admin",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.30.0-beta.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"description": "A collection of plugins that together form a complete admin interface, customizable and extensible with Webiny apps and plugins.",
|
|
6
6
|
"repository": {
|
|
@@ -13,24 +13,24 @@
|
|
|
13
13
|
"@apollo/react-common": "3.1.4",
|
|
14
14
|
"@apollo/react-components": "3.1.5",
|
|
15
15
|
"@apollo/react-hooks": "3.1.5",
|
|
16
|
-
"@babel/runtime": "7.18.
|
|
16
|
+
"@babel/runtime": "7.18.6",
|
|
17
17
|
"@editorjs/editorjs": "2.25.0",
|
|
18
18
|
"@emotion/core": "10.3.1",
|
|
19
19
|
"@emotion/styled": "10.3.0",
|
|
20
20
|
"@svgr/webpack": "6.2.1",
|
|
21
21
|
"@types/mime": "2.0.3",
|
|
22
22
|
"@types/react": "16.14.2",
|
|
23
|
-
"@webiny/app": "5.
|
|
24
|
-
"@webiny/app-admin-core": "5.
|
|
25
|
-
"@webiny/app-security": "5.
|
|
26
|
-
"@webiny/app-wcp": "5.
|
|
27
|
-
"@webiny/form": "5.
|
|
28
|
-
"@webiny/plugins": "5.
|
|
29
|
-
"@webiny/react-router": "5.
|
|
30
|
-
"@webiny/telemetry": "5.
|
|
31
|
-
"@webiny/ui": "5.
|
|
32
|
-
"@webiny/ui-composer": "5.
|
|
33
|
-
"@webiny/validation": "5.
|
|
23
|
+
"@webiny/app": "5.30.0-beta.1",
|
|
24
|
+
"@webiny/app-admin-core": "5.30.0-beta.1",
|
|
25
|
+
"@webiny/app-security": "5.30.0-beta.1",
|
|
26
|
+
"@webiny/app-wcp": "5.30.0-beta.1",
|
|
27
|
+
"@webiny/form": "5.30.0-beta.1",
|
|
28
|
+
"@webiny/plugins": "5.30.0-beta.1",
|
|
29
|
+
"@webiny/react-router": "5.30.0-beta.1",
|
|
30
|
+
"@webiny/telemetry": "5.30.0-beta.1",
|
|
31
|
+
"@webiny/ui": "5.30.0-beta.1",
|
|
32
|
+
"@webiny/ui-composer": "5.30.0-beta.1",
|
|
33
|
+
"@webiny/validation": "5.30.0-beta.1",
|
|
34
34
|
"apollo-cache": "1.3.5",
|
|
35
35
|
"apollo-client": "2.6.10",
|
|
36
36
|
"apollo-link": "1.2.14",
|
|
@@ -70,13 +70,13 @@
|
|
|
70
70
|
"@types/bytes": "^3.1.1",
|
|
71
71
|
"@types/graphlib": "^2.1.8",
|
|
72
72
|
"@types/store": "^2.0.2",
|
|
73
|
-
"@webiny/cli": "^5.
|
|
74
|
-
"@webiny/project-utils": "^5.
|
|
73
|
+
"@webiny/cli": "^5.30.0-beta.1",
|
|
74
|
+
"@webiny/project-utils": "^5.30.0-beta.1",
|
|
75
75
|
"babel-plugin-emotion": "^9.2.8",
|
|
76
76
|
"babel-plugin-lodash": "^3.3.4",
|
|
77
77
|
"rimraf": "^3.0.2",
|
|
78
78
|
"ttypescript": "^1.5.12",
|
|
79
|
-
"typescript": "4.
|
|
79
|
+
"typescript": "4.7.4"
|
|
80
80
|
},
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public",
|
|
@@ -98,5 +98,5 @@
|
|
|
98
98
|
]
|
|
99
99
|
}
|
|
100
100
|
},
|
|
101
|
-
"gitHead": "
|
|
101
|
+
"gitHead": "d3b1e74ec1077a608fe40dfd3aba237b1b29a458"
|
|
102
102
|
}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
@use "
|
|
2
|
-
@use "
|
|
3
|
-
@use "
|
|
4
|
-
@use "
|
|
5
|
-
@use "
|
|
6
|
-
@use "
|
|
7
|
-
@use "
|
|
8
|
-
@use "
|
|
9
|
-
@use "
|
|
10
|
-
@use "
|
|
11
|
-
@use "
|
|
12
|
-
@use "
|
|
13
|
-
@use "
|
|
14
|
-
@use "
|
|
15
|
-
@use "
|
|
1
|
+
@use "@material/top-app-bar/_mixins.scss" as topAppBar;
|
|
2
|
+
@use "@material/elevation/mixins" as elevation;
|
|
3
|
+
@use "@material/button/mixins" as button;
|
|
4
|
+
@use "@material/icon-button/mixins" as iconButton;
|
|
5
|
+
@use "@material/drawer/mixins" as drawer;
|
|
6
|
+
@use "@material/tab-bar/mixins" as tabBar;
|
|
7
|
+
@use "@material/tab/mixins" as tab;
|
|
8
|
+
@use "@material/tab-indicator/mixins" as tabIndicator;
|
|
9
|
+
@use "@material/list/mixins" as list;
|
|
10
|
+
@use "@material/switch/mixins" as switch;
|
|
11
|
+
@use "@material/textfield/mixins" as textfield;
|
|
12
|
+
@use "@material/select/mixins" as select;
|
|
13
|
+
@use "@material/checkbox/mixins" as checkbox;
|
|
14
|
+
@use "@material/radio/mixins" as radio;
|
|
15
|
+
@use "@material/snackbar/mixins" as snackbar;
|
|
16
16
|
|
|
17
17
|
// top app bar should use theme-surface as the fill color
|
|
18
18
|
.mdc-top-app-bar {
|
|
19
|
-
@include topAppBar.
|
|
19
|
+
@include topAppBar.fill-color($mdc-theme-surface);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.mdc-top-app-bar.primary {
|
|
23
|
-
@include topAppBar.
|
|
23
|
+
@include topAppBar.fill-color($mdc-theme-primary);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
// elevation should use theme-surface as fill color so it can be used as surface
|
|
27
27
|
.mdc-elevation--z1 {
|
|
28
|
-
@include elevation.
|
|
28
|
+
@include elevation.elevation(1, $mdc-theme-on-surface);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
.mdc-elevation--z2 {
|
|
32
|
-
@include elevation.
|
|
32
|
+
@include elevation.elevation(2, $mdc-theme-on-surface);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
.mdc-elevation--z3 {
|
|
36
|
-
@include elevation.
|
|
36
|
+
@include elevation.elevation(3, $mdc-theme-on-surface);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
.mdc-elevation--z1,
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
// button styles
|
|
52
52
|
.mdc-button {
|
|
53
|
-
@include button.
|
|
53
|
+
@include button.shape-radius(2px);
|
|
54
54
|
.mdc-button__label {
|
|
55
55
|
display: flex;
|
|
56
56
|
align-items: center;
|
|
@@ -60,17 +60,17 @@
|
|
|
60
60
|
// set icon colors
|
|
61
61
|
.mdc-icon,
|
|
62
62
|
.mdc-icon-button {
|
|
63
|
-
@include iconButton.
|
|
63
|
+
@include iconButton.ink-color($mdc-theme-text-secondary-on-background);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
// drawer
|
|
67
67
|
.mcd-drawer {
|
|
68
|
-
@include drawer.
|
|
69
|
-
@include drawer.
|
|
70
|
-
@include drawer.
|
|
71
|
-
@include drawer.
|
|
72
|
-
@include drawer.
|
|
73
|
-
@include drawer.
|
|
68
|
+
@include drawer.title-ink-color($mdc-theme-text-primary-on-background);
|
|
69
|
+
@include drawer.subtitle-ink-color($mdc-theme-text-primary-on-background);
|
|
70
|
+
@include drawer.item-icon-ink-color($mdc-theme-text-primary-on-background);
|
|
71
|
+
@include drawer.item-text-ink-color($mdc-theme-text-primary-on-background);
|
|
72
|
+
@include drawer.surface-fill-color($mdc-theme-surface);
|
|
73
|
+
@include drawer.item-shape-radius(0);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
// fix for drawer positioning
|
|
@@ -90,31 +90,31 @@
|
|
|
90
90
|
|
|
91
91
|
// tabs
|
|
92
92
|
.mdc-tab-bar {
|
|
93
|
-
@include tabBar.
|
|
93
|
+
@include tabBar.width("100%");
|
|
94
94
|
|
|
95
95
|
.mdc-tab {
|
|
96
|
-
@include tab.
|
|
97
|
-
@include tab.
|
|
98
|
-
@include tab.
|
|
96
|
+
@include tab.fixed-width("100px");
|
|
97
|
+
@include tab.text-label-color($mdc-theme-text-primary-on-background);
|
|
98
|
+
@include tab.icon-color($mdc-theme-text-primary-on-background);
|
|
99
99
|
|
|
100
100
|
// fixes tab width
|
|
101
101
|
flex: 1 0;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
.mdc-tab-indicator {
|
|
105
|
-
@include tabIndicator.
|
|
105
|
+
@include tabIndicator.underline-color($mdc-theme-primary);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
// list
|
|
110
110
|
.mdc-list {
|
|
111
|
-
@include list.
|
|
112
|
-
@include list.
|
|
113
|
-
@include list.
|
|
114
|
-
@include list.
|
|
115
|
-
@include list.
|
|
116
|
-
@include list.
|
|
117
|
-
@include list.
|
|
111
|
+
@include list.item-primary-text-ink-color($mdc-theme-text-primary-on-background);
|
|
112
|
+
@include list.item-secondary-text-ink-color($mdc-theme-text-secondary-on-background);
|
|
113
|
+
@include list.item-graphic-ink-color($mdc-theme-text-secondary-on-background);
|
|
114
|
+
@include list.item-meta-ink-color($mdc-theme-text-secondary-on-background);
|
|
115
|
+
@include list.divider-color($mdc-theme-on-background);
|
|
116
|
+
@include list.group-subheader-ink-color($mdc-theme-text-primary-on-background);
|
|
117
|
+
@include list.single-line-shape-radius(0);
|
|
118
118
|
|
|
119
119
|
.mdc-list-item {
|
|
120
120
|
color: $mdc-theme-text-primary-on-background;
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
|
|
140
140
|
// switch
|
|
141
141
|
.mdc-switch {
|
|
142
|
-
@include switch.
|
|
142
|
+
@include switch.toggled-off-track-color($mdc-theme-on-surface);
|
|
143
143
|
margin-left: 5px;
|
|
144
144
|
margin-right: 10px;
|
|
145
145
|
}
|
|
@@ -154,11 +154,11 @@ Fix the width of input components when inside grids
|
|
|
154
154
|
*/
|
|
155
155
|
.mdc-text-field {
|
|
156
156
|
width: 100%;
|
|
157
|
-
@include textfield.
|
|
158
|
-
@include textfield.
|
|
159
|
-
@include textfield.
|
|
160
|
-
@include textfield.
|
|
161
|
-
@include textfield.
|
|
157
|
+
@include textfield.shape-radius(0);
|
|
158
|
+
@include textfield.textarea-shape-radius(0);
|
|
159
|
+
@include textfield.fill-color($mdc-theme-on-background);
|
|
160
|
+
@include textfield.label-color($mdc-theme-text-primary-on-background);
|
|
161
|
+
@include textfield.ink-color($mdc-theme-on-surface);
|
|
162
162
|
&.mdc-text-field--textarea {
|
|
163
163
|
textarea {
|
|
164
164
|
padding-top: 25px;
|
|
@@ -230,19 +230,19 @@ Fix the width of input components when inside grids
|
|
|
230
230
|
> .mdc-tab-bar {
|
|
231
231
|
position: absolute;
|
|
232
232
|
z-index: 10;
|
|
233
|
-
@include tabBar.
|
|
233
|
+
@include tabBar.width(100%);
|
|
234
234
|
background-color: $mdc-theme-secondary;
|
|
235
235
|
.mdc-tab {
|
|
236
|
-
@include tab.
|
|
237
|
-
@include tab.
|
|
238
|
-
@include tab.
|
|
236
|
+
@include tab.text-label-color($mdc-theme-on-secondary);
|
|
237
|
+
@include tab.icon-color($mdc-theme-on-secondary);
|
|
238
|
+
@include tab.fixed-width(100px);
|
|
239
239
|
justify-content: flex-start;
|
|
240
240
|
font-weight: 600;
|
|
241
241
|
}
|
|
242
242
|
.mdc-tab-indicator {
|
|
243
243
|
padding-bottom: 5px;
|
|
244
244
|
margin-top: -1px;
|
|
245
|
-
@include tabIndicator.
|
|
245
|
+
@include tabIndicator.underline-color($mdc-theme-on-secondary);
|
|
246
246
|
background-color: $mdc-theme-secondary;
|
|
247
247
|
}
|
|
248
248
|
}
|
|
@@ -267,13 +267,13 @@ Fix the width of input components when inside grids
|
|
|
267
267
|
// select
|
|
268
268
|
.mdc-select {
|
|
269
269
|
width: 100%;
|
|
270
|
-
@include select.
|
|
271
|
-
@include select.
|
|
272
|
-
@include select.
|
|
273
|
-
@include select.
|
|
274
|
-
@include select.
|
|
275
|
-
@include select.
|
|
276
|
-
@include select.
|
|
270
|
+
@include select.ink-color($mdc-theme-text-primary-on-background);
|
|
271
|
+
@include select.label-color($mdc-theme-text-secondary-on-background);
|
|
272
|
+
@include select.bottom-line-color($mdc-theme-text-secondary-on-background);
|
|
273
|
+
@include select.hover-bottom-line-color($mdc-theme-text-primary-on-background);
|
|
274
|
+
@include select.container-fill-color($mdc-theme-on-background);
|
|
275
|
+
@include select.shape-radius(0);
|
|
276
|
+
@include select.outline-shape-radius(2);
|
|
277
277
|
|
|
278
278
|
/*
|
|
279
279
|
Fix for select box appearance. For some reason browser prefix css attributes are striped away.
|
|
@@ -290,28 +290,40 @@ Fix the width of input components when inside grids
|
|
|
290
290
|
padding-top: 10px;
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
293
|
+
&:not(.mdc-select--disabled).mdc-select--focused {
|
|
294
|
+
.mdc-floating-label {
|
|
295
|
+
color: rgba(0, 0, 0, 0.6);
|
|
296
|
+
}
|
|
297
|
+
.mdc-select__dropdown-icon {
|
|
298
|
+
@include select.dd-arrow-svg-bg_($mdc-theme-primary, 1);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
&:not(.mdc-select--disabled).mdc-select--focused {
|
|
302
|
+
.mdc-floating-label {
|
|
303
|
+
color: rgba(0, 0, 0, 0.6);
|
|
304
|
+
}
|
|
305
|
+
.mdc-select__dropdown-icon {
|
|
306
|
+
@include select.dd-arrow-svg-bg_($mdc-theme-primary, 1);
|
|
307
|
+
}
|
|
297
308
|
}
|
|
298
309
|
}
|
|
299
310
|
|
|
300
311
|
// checkbox
|
|
301
312
|
.mdc-checkbox {
|
|
302
|
-
@include checkbox.
|
|
313
|
+
@include checkbox.container-colors("text-secondary-on-background");
|
|
303
314
|
}
|
|
304
315
|
|
|
305
316
|
// radio button
|
|
306
317
|
.mdc-radio {
|
|
307
|
-
@include radio.
|
|
318
|
+
@include radio.unchecked-stroke-color("text-secondary-on-background");
|
|
308
319
|
}
|
|
309
320
|
|
|
310
321
|
// snackbar
|
|
311
322
|
.mdc-snackbar {
|
|
312
|
-
@include snackbar.
|
|
313
|
-
@include snackbar.
|
|
323
|
+
@include snackbar.shape-radius(2px);
|
|
324
|
+
@include snackbar.z-index(1000);
|
|
314
325
|
}
|
|
326
|
+
|
|
315
327
|
.mdc-snackbar__action:not(:disabled) {
|
|
316
328
|
color: var(--mdc-theme-primary);
|
|
317
329
|
&::before {
|
package/styles/material.scss
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@use "
|
|
1
|
+
@use "@material/theme/mixins" as themeMixins;
|
|
2
2
|
|
|
3
3
|
// material variables
|
|
4
4
|
$mdc-theme-primary: $webiny-theme-light-primary;
|
|
@@ -34,6 +34,7 @@ body {
|
|
|
34
34
|
--mdc-theme-text-secondary-on-background: #{$mdc-theme-text-secondary-on-background};
|
|
35
35
|
--mdc-theme-text-hint-on-dark: #{$mdc-theme-text-hint-on-dark};
|
|
36
36
|
--mdc-theme-caret-down: #{$webiny-theme-light-caret-down};
|
|
37
|
+
--mdc-typography-font-family: #{$mdc-typography-font-family};
|
|
37
38
|
|
|
38
39
|
font-family: "Source Sans Pro";
|
|
39
40
|
}
|
|
@@ -15,6 +15,8 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
|
|
|
15
15
|
|
|
16
16
|
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
17
17
|
|
|
18
|
+
var _kebabCase2 = _interopRequireDefault(require("lodash/kebabCase"));
|
|
19
|
+
|
|
18
20
|
var _react = _interopRequireDefault(require("react"));
|
|
19
21
|
|
|
20
22
|
var _Button = require("@webiny/ui/Button");
|
|
@@ -92,7 +94,8 @@ var ButtonElement = /*#__PURE__*/function (_UIElement) {
|
|
|
92
94
|
return /*#__PURE__*/_react.default.createElement(Component, {
|
|
93
95
|
onClick: function onClick() {
|
|
94
96
|
return _onClick(props);
|
|
95
|
-
}
|
|
97
|
+
},
|
|
98
|
+
"data-testid": "button-element-".concat((0, _kebabCase2.default)(this.getLabel(props)))
|
|
96
99
|
}, this.getLabel(props));
|
|
97
100
|
}
|
|
98
101
|
}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BUTTONS","default","ButtonDefault","primary","ButtonPrimary","secondary","ButtonSecondary","ButtonElement","label","config","props","type","onClick","Component","getType","getOnClick","getLabel","UIElement"],"sources":["ButtonElement.tsx"],"sourcesContent":["import React from \"react\";\nimport { ButtonDefault, ButtonPrimary, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { UIElement, UIElementConfig } from \"../UIElement\";\n\nexport type ButtonElementType = \"default\" | \"primary\" | \"secondary\";\n\nexport interface ButtonOnClick<TRenderProps = any> {\n (props: TRenderProps): void;\n}\n\ninterface GetterWithProps<TProps, TReturn> {\n (props: TProps): TReturn;\n}\n\nexport interface ButtonElementConfig<TRenderProps> extends UIElementConfig {\n type: ButtonElementType | GetterWithProps<TRenderProps, ButtonElementType>;\n label: string | GetterWithProps<TRenderProps, string>;\n onClick: ButtonOnClick<TRenderProps>;\n}\n\nconst BUTTONS = {\n default: ButtonDefault,\n primary: ButtonPrimary,\n secondary: ButtonSecondary\n};\n\nexport class ButtonElement<TRenderProps = any> extends UIElement<\n ButtonElementConfig<TRenderProps>\n> {\n public setLabel<TProps extends TRenderProps = TRenderProps>(\n label: string | GetterWithProps<TProps, string>\n ): void {\n /**\n * TODO @ts-refactor\n * 'TProps' could be instantiated with an arbitrary type which could be unrelated to 'TRenderProps'\n */\n // @ts-ignore\n this.config.label = label;\n }\n\n public getLabel(props?: TRenderProps): string {\n if (typeof this.config.label === \"function\") {\n // TODO @ts-refactor find out correct types to pass\n return this.config.label(props as TRenderProps);\n }\n return this.config.label;\n }\n\n public setType(type: ButtonElementType): void {\n this.config.type = type;\n }\n\n public getType(props?: TRenderProps): ButtonElementType {\n if (typeof this.config.type === \"function\") {\n // TODO @ts-refactor find out correct types to pass\n return this.config.type(props as TRenderProps);\n }\n return this.config.type;\n }\n\n public setOnClick(onClick: ButtonOnClick<TRenderProps>): void {\n this.config.onClick = onClick;\n }\n\n public getOnClick() {\n return this.config.onClick;\n }\n\n public override render(props: TRenderProps): React.ReactElement {\n const Component = BUTTONS[this.getType(props)];\n const onClick = this.getOnClick();\n\n return <Component
|
|
1
|
+
{"version":3,"names":["BUTTONS","default","ButtonDefault","primary","ButtonPrimary","secondary","ButtonSecondary","ButtonElement","label","config","props","type","onClick","Component","getType","getOnClick","getLabel","UIElement"],"sources":["ButtonElement.tsx"],"sourcesContent":["import React from \"react\";\nimport { ButtonDefault, ButtonPrimary, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { UIElement, UIElementConfig } from \"../UIElement\";\nimport { kebabCase } from \"lodash\";\n\nexport type ButtonElementType = \"default\" | \"primary\" | \"secondary\";\n\nexport interface ButtonOnClick<TRenderProps = any> {\n (props: TRenderProps): void;\n}\n\ninterface GetterWithProps<TProps, TReturn> {\n (props: TProps): TReturn;\n}\n\nexport interface ButtonElementConfig<TRenderProps> extends UIElementConfig {\n type: ButtonElementType | GetterWithProps<TRenderProps, ButtonElementType>;\n label: string | GetterWithProps<TRenderProps, string>;\n onClick: ButtonOnClick<TRenderProps>;\n}\n\nconst BUTTONS = {\n default: ButtonDefault,\n primary: ButtonPrimary,\n secondary: ButtonSecondary\n};\n\nexport class ButtonElement<TRenderProps = any> extends UIElement<\n ButtonElementConfig<TRenderProps>\n> {\n public setLabel<TProps extends TRenderProps = TRenderProps>(\n label: string | GetterWithProps<TProps, string>\n ): void {\n /**\n * TODO @ts-refactor\n * 'TProps' could be instantiated with an arbitrary type which could be unrelated to 'TRenderProps'\n */\n // @ts-ignore\n this.config.label = label;\n }\n\n public getLabel(props?: TRenderProps): string {\n if (typeof this.config.label === \"function\") {\n // TODO @ts-refactor find out correct types to pass\n return this.config.label(props as TRenderProps);\n }\n return this.config.label;\n }\n\n public setType(type: ButtonElementType): void {\n this.config.type = type;\n }\n\n public getType(props?: TRenderProps): ButtonElementType {\n if (typeof this.config.type === \"function\") {\n // TODO @ts-refactor find out correct types to pass\n return this.config.type(props as TRenderProps);\n }\n return this.config.type;\n }\n\n public setOnClick(onClick: ButtonOnClick<TRenderProps>): void {\n this.config.onClick = onClick;\n }\n\n public getOnClick() {\n return this.config.onClick;\n }\n\n public override render(props: TRenderProps): React.ReactElement {\n const Component = BUTTONS[this.getType(props)];\n const onClick = this.getOnClick();\n\n return (\n <Component\n onClick={() => onClick(props)}\n data-testid={`button-element-${kebabCase(this.getLabel(props))}`}\n >\n {this.getLabel(props)}\n </Component>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAmBA,IAAMA,OAAO,GAAG;EACZC,OAAO,EAAEC,qBADG;EAEZC,OAAO,EAAEC,qBAFG;EAGZC,SAAS,EAAEC;AAHC,CAAhB;;IAMaC,a;;;;;;;;;;;;WAGT,kBACIC,KADJ,EAEQ;MACJ;AACR;AACA;AACA;MACQ;MACA,KAAKC,MAAL,CAAYD,KAAZ,GAAoBA,KAApB;IACH;;;WAED,kBAAgBE,KAAhB,EAA8C;MAC1C,IAAI,OAAO,KAAKD,MAAL,CAAYD,KAAnB,KAA6B,UAAjC,EAA6C;QACzC;QACA,OAAO,KAAKC,MAAL,CAAYD,KAAZ,CAAkBE,KAAlB,CAAP;MACH;;MACD,OAAO,KAAKD,MAAL,CAAYD,KAAnB;IACH;;;WAED,iBAAeG,IAAf,EAA8C;MAC1C,KAAKF,MAAL,CAAYE,IAAZ,GAAmBA,IAAnB;IACH;;;WAED,iBAAeD,KAAf,EAAwD;MACpD,IAAI,OAAO,KAAKD,MAAL,CAAYE,IAAnB,KAA4B,UAAhC,EAA4C;QACxC;QACA,OAAO,KAAKF,MAAL,CAAYE,IAAZ,CAAiBD,KAAjB,CAAP;MACH;;MACD,OAAO,KAAKD,MAAL,CAAYE,IAAnB;IACH;;;WAED,oBAAkBC,OAAlB,EAA8D;MAC1D,KAAKH,MAAL,CAAYG,OAAZ,GAAsBA,OAAtB;IACH;;;WAED,sBAAoB;MAChB,OAAO,KAAKH,MAAL,CAAYG,OAAnB;IACH;;;WAED,gBAAuBF,KAAvB,EAAgE;MAC5D,IAAMG,SAAS,GAAGb,OAAO,CAAC,KAAKc,OAAL,CAAaJ,KAAb,CAAD,CAAzB;;MACA,IAAME,QAAO,GAAG,KAAKG,UAAL,EAAhB;;MAEA,oBACI,6BAAC,SAAD;QACI,OAAO,EAAE;UAAA,OAAMH,QAAO,CAACF,KAAD,CAAb;QAAA,CADb;QAEI,wCAA+B,yBAAU,KAAKM,QAAL,CAAcN,KAAd,CAAV,CAA/B;MAFJ,GAIK,KAAKM,QAAL,CAAcN,KAAd,CAJL,CADJ;IAQH;;;EAtDkDO,qB"}
|
|
@@ -58,6 +58,7 @@ var InputElement = /*#__PURE__*/function (_FormFieldElement) {
|
|
|
58
58
|
return _this2.onAfterChange(value, form);
|
|
59
59
|
}
|
|
60
60
|
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
61
|
+
"data-testid": "input-element-".concat(this.getLabel(props)),
|
|
61
62
|
label: this.getLabel(props),
|
|
62
63
|
placeholder: this.getPlaceholder(props),
|
|
63
64
|
disabled: this.getIsDisabled(props),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["InputElement","id","config","applyPlugins","props","formProps","Error","Bind","getName","getValidators","getDefaultValue","value","cb","onBeforeChange","form","onAfterChange","getLabel","getPlaceholder","getIsDisabled","getDescription","FormFieldElement"],"sources":["InputElement.tsx"],"sourcesContent":["import React from \"react\";\nimport { Input } from \"@webiny/ui/Input\";\nimport {\n FormFieldElement,\n FormFieldElementConfig,\n FormFieldElementRenderProps\n} from \"~/ui/elements/form/FormFieldElement\";\n\nexport type InputElementRenderProps = FormFieldElementRenderProps;\nexport class InputElement extends FormFieldElement {\n public constructor(id: string, config: FormFieldElementConfig) {\n super(id, config);\n\n this.applyPlugins(InputElement);\n }\n\n public override render(props: FormFieldElementRenderProps): React.ReactNode {\n if (!props.formProps) {\n throw Error(`InputElement must be placed inside of a FormElement.`);\n }\n\n const { Bind } = props.formProps;\n\n return (\n <Bind\n name={this.getName()}\n validators={this.getValidators(props)}\n defaultValue={this.getDefaultValue(props)}\n beforeChange={(value: string, cb) => this.onBeforeChange(value, cb)}\n afterChange={(value: string, form) => this.onAfterChange(value, form)}\n >\n <Input\n label={this.getLabel(props)}\n placeholder={this.getPlaceholder(props)}\n disabled={this.getIsDisabled(props)}\n description={this.getDescription(props)}\n />\n </Bind>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;IAOaA,Y;;;;;EACT,sBAAmBC,EAAnB,EAA+BC,MAA/B,EAA+D;IAAA;;IAAA;IAC3D,0BAAMD,EAAN,EAAUC,MAAV;;IAEA,MAAKC,YAAL,CAAkBH,YAAlB;;IAH2D;EAI9D;;;;WAED,gBAAuBI,KAAvB,EAA4E;MAAA;;MACxE,IAAI,CAACA,KAAK,CAACC,SAAX,EAAsB;QAClB,MAAMC,KAAK,wDAAX;MACH;;MAED,IAAQC,IAAR,GAAiBH,KAAK,CAACC,SAAvB,CAAQE,IAAR;MAEA,oBACI,6BAAC,IAAD;QACI,IAAI,EAAE,KAAKC,OAAL,EADV;QAEI,UAAU,EAAE,KAAKC,aAAL,CAAmBL,KAAnB,CAFhB;QAGI,YAAY,EAAE,KAAKM,eAAL,CAAqBN,KAArB,CAHlB;QAII,YAAY,EAAE,sBAACO,KAAD,EAAgBC,EAAhB;UAAA,OAAuB,MAAI,CAACC,cAAL,CAAoBF,KAApB,EAA2BC,EAA3B,CAAvB;QAAA,CAJlB;QAKI,WAAW,EAAE,qBAACD,KAAD,EAAgBG,IAAhB;UAAA,OAAyB,MAAI,CAACC,aAAL,CAAmBJ,KAAnB,EAA0BG,IAA1B,CAAzB;QAAA;MALjB,gBAOI,6BAAC,YAAD;QACI,KAAK,EAAE,
|
|
1
|
+
{"version":3,"names":["InputElement","id","config","applyPlugins","props","formProps","Error","Bind","getName","getValidators","getDefaultValue","value","cb","onBeforeChange","form","onAfterChange","getLabel","getPlaceholder","getIsDisabled","getDescription","FormFieldElement"],"sources":["InputElement.tsx"],"sourcesContent":["import React from \"react\";\nimport { Input } from \"@webiny/ui/Input\";\nimport {\n FormFieldElement,\n FormFieldElementConfig,\n FormFieldElementRenderProps\n} from \"~/ui/elements/form/FormFieldElement\";\n\nexport type InputElementRenderProps = FormFieldElementRenderProps;\nexport class InputElement extends FormFieldElement {\n public constructor(id: string, config: FormFieldElementConfig) {\n super(id, config);\n\n this.applyPlugins(InputElement);\n }\n\n public override render(props: FormFieldElementRenderProps): React.ReactNode {\n if (!props.formProps) {\n throw Error(`InputElement must be placed inside of a FormElement.`);\n }\n\n const { Bind } = props.formProps;\n\n return (\n <Bind\n name={this.getName()}\n validators={this.getValidators(props)}\n defaultValue={this.getDefaultValue(props)}\n beforeChange={(value: string, cb) => this.onBeforeChange(value, cb)}\n afterChange={(value: string, form) => this.onAfterChange(value, form)}\n >\n <Input\n data-testid={`input-element-${this.getLabel(props)}`}\n label={this.getLabel(props)}\n placeholder={this.getPlaceholder(props)}\n disabled={this.getIsDisabled(props)}\n description={this.getDescription(props)}\n />\n </Bind>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;IAOaA,Y;;;;;EACT,sBAAmBC,EAAnB,EAA+BC,MAA/B,EAA+D;IAAA;;IAAA;IAC3D,0BAAMD,EAAN,EAAUC,MAAV;;IAEA,MAAKC,YAAL,CAAkBH,YAAlB;;IAH2D;EAI9D;;;;WAED,gBAAuBI,KAAvB,EAA4E;MAAA;;MACxE,IAAI,CAACA,KAAK,CAACC,SAAX,EAAsB;QAClB,MAAMC,KAAK,wDAAX;MACH;;MAED,IAAQC,IAAR,GAAiBH,KAAK,CAACC,SAAvB,CAAQE,IAAR;MAEA,oBACI,6BAAC,IAAD;QACI,IAAI,EAAE,KAAKC,OAAL,EADV;QAEI,UAAU,EAAE,KAAKC,aAAL,CAAmBL,KAAnB,CAFhB;QAGI,YAAY,EAAE,KAAKM,eAAL,CAAqBN,KAArB,CAHlB;QAII,YAAY,EAAE,sBAACO,KAAD,EAAgBC,EAAhB;UAAA,OAAuB,MAAI,CAACC,cAAL,CAAoBF,KAApB,EAA2BC,EAA3B,CAAvB;QAAA,CAJlB;QAKI,WAAW,EAAE,qBAACD,KAAD,EAAgBG,IAAhB;UAAA,OAAyB,MAAI,CAACC,aAAL,CAAmBJ,KAAnB,EAA0BG,IAA1B,CAAzB;QAAA;MALjB,gBAOI,6BAAC,YAAD;QACI,uCAA8B,KAAKE,QAAL,CAAcZ,KAAd,CAA9B,CADJ;QAEI,KAAK,EAAE,KAAKY,QAAL,CAAcZ,KAAd,CAFX;QAGI,WAAW,EAAE,KAAKa,cAAL,CAAoBb,KAApB,CAHjB;QAII,QAAQ,EAAE,KAAKc,aAAL,CAAmBd,KAAnB,CAJd;QAKI,WAAW,EAAE,KAAKe,cAAL,CAAoBf,KAApB;MALjB,EAPJ,CADJ;IAiBH;;;EA/B6BgB,mC"}
|